Debes usar una instrucción condicional como la del ejemplo que voy a darte. Supongamos que tienes sólo dos profesores, cuyos Id son 1 y 2 (estoy asumiendo que Id es el nombre del campo que identifica a cada profesor y que es un campo de tipo numérico - Integer).
El código debes introducirlo en el evento Valid del TextBox que captura el Id.
local nId As Integer
&& Primero debes capturar el Id...
nId = This.Value && Se supone que estas dentro del evento Valid del TextBox
&& Creo un cursor el cual contendrá los datos que cargará el ComboBox
select nombre_prof, id_prof tabla_que_te_interesa where tabla.campoX == nId ;
into cursor curProf
with Thisform.cboTuCombo && Tu ComboBox...
.BoundColumn = 2
.ColumnCount = 2
.ColumnLines = .F.
.ColumnWidths = "200,0"
.IncrementalSearch = .T.
.ListIndex = 0
.RowSource = "curProf"
.RowSourceType = 2
.Style = 2
endwith
Las propiedades que estoy modificando en el ComboBox se refieren a lo siguiente:
BoundColumn: Indica cual será la columna que retornará el valor a ser usado (en mi ejemplo, el Id es colocado en una segunda columna dentro del ComboBox y esta columna es ocultada.
ColumnCount: Le indica al ComboBox que tiene dos columnas.
ColumnLines: Elimino las líneas de división entre columnas (esto es ya algo de gustos personales).
ColumnWidths: Ancho (en píxeles) de cada columna. Como verás, la segunda columna tiene un ancho de cero (0) lo cual la hace invisible. Solo me interesa mostrar los nombres.
IncrementalSearch: Le indico al Combo que debe comportarse como las autocompletaciones de Facebook.
ListIndex: Indico cual es el elemento seleccionado, por omisión ninguno (0).
RowSource: Origen de los datos del ComboBox, en este caso el cursor que creamos con el SELECT SQL
RowSourceType: Tipo de datos = Área (tabla, en este caso el cursor).
Style: No permite que el usuario pueda escribir en la caja de texto del ComboBox.
Bueno, espero que te sirva de algo este ejemplo.