Obtendo o valor da caixa de texto no manipulador de eventos de mudança
Eu escrevi um formulário que realiza consultas de forma assíncronacomo o texto é digitado em uma caixa de texto, no entanto, eu um pouco arbitrariamente parece receber o seguinte erro: "Você não pode fazer referência a uma propriedade ou método para um controle, a menos que o controle tenha foco."
O código imediatamente relevante é:
Dim UpdateRequested As Boolean
Dim qryText As String
.
.
.
Private Sub txtBox_Change()
qryText = txtBox.Text
UpdateRequested = true
End Sub
Algum lugar nas elipses é o código que manipula dinamicamente o carregamento de um conjunto de registros ADODB, preenchendo uma tabela local e atualizando um subformulário. No entanto, mesmo quando desativo esse código, o problema persiste: Às vezes, recebo o erro. Às vezes eu não faço.
Isso parece ser persistente ao fechar o banco de dados e reabri-lo. Toda vez que ele começa a funcionar novamente, é porque eu tenho andado a brincar com código no depurador, mas não tenho certeza do que exatamente está fazendo com que ele magicamente "simplesmente funcione" ou o que está fazendo com que ele não funcione.
AtualizarApenas para tornar as coisas mais intrigantes, adicionei alguns manipuladores de eventos simples:
Private Sub txtBox_GotFocus()
MsgBox "Got focus"
End Sub
Private Sub txtBox_LostFocus()
MsgBox "Lost focus"
End Sub
Eu corro o formulário. Eu clico na caixa de teste. Eu recebo a mensagem "Got focus". Assim que eu digito, vejo o erro como descrito acima. Se eu reabrir o formulário, posso clicar entre a caixa de texto em questão (que não está vinculada) e uma caixa de texto vinculada no subformulário e ver as mensagens "Got focus" e "lost focus" como seria de se esperar. Além disso, mostrar uma caixa de mensagem com o valor atual de "Screen.ActiveControl.Name" mostra o nome esperado logo antes da propriedade Text ser acessada.