Este artigo foi reproduzido de: http://wenku.baidu.com/view/ba7dfdd180eb6294dd886c77.html
Na programação visual, o foco é um conceito muito importante. Os detalhes a seguir detalham como definir o foco e a ordem das guias dos controles no formulário.
1 Defina o foco
Simplificando, o foco é a capacidade de receber entrada do mouse ou teclado do usuário. Quando um objeto está em foco, ele pode receber a entrada do usuário. No sistema Windows, vários aplicativos podem ser executados em um determinado momento, mas apenas o aplicativo em foco tem uma barra de título ativa e pode receber entrada do usuário. Da mesma forma, em um formulário com várias caixas de texto, apenas a caixa de texto em foco pode aceitar a entrada do usuário.
Quando o objeto obtém o foco, ele aciona o evento GotFocus; quando o objeto perde o foco, ele aciona o evento LostFocus. Vimos exemplos disso no exemplo da caixa de texto acima. O processo de evento LostFocus é normalmente utilizado para confirmar e verificar a validade da atualização, mas também pode ser utilizado para modificar ou alterar as condições estabelecidas no processo de evento GotFocus. Os formulários e a maioria dos controles oferecem suporte a esses eventos.
Você pode definir o foco de um objeto das seguintes maneiras:
l Clique no objeto em tempo de execução
l Use a tecla de atalho para selecionar o objeto em tempo de execução
l Use o método SetFocus no código do programa
l Use a tecla Tab para mover o foco para o objeto
O foco só pode ser movido para uma forma ou controle visível, portanto, um objeto só pode receber o foco quando as propriedades Enabled e Visible de um objeto são True. A propriedade Enabled permite que o objeto responda a eventos gerados pelo usuário, como eventos de teclado e mouse, enquanto a propriedade Visible determina se o objeto está visível.
Observe que nem todos os objetos podem receber foco. Certos controles, incluindo quadro, rótulo, menu, linha, forma, imagem e cronômetro, não podem receber o foco. Para o formulário, somente quando algum controle no formulário não puder receber o foco, o formulário poderá receber o foco.
Para a maioria dos controles que podem receber foco, pode-se ver pela aparência se há foco. Por exemplo, quando um controle como um botão de comando, uma caixa de seleção ou um botão de rádio tem o foco, há uma caixa tracejada dentro dele, conforme mostrado na Figura 2-36. Quando a caixa de texto está em foco, há um cursor de inserção piscando na caixa de texto.
Conforme mencionado anteriormente, o foco pode ser definido por meio do método SetFocus. No entanto, deve-se notar que o formulário ou os controles no formulário não são visíveis antes que o evento Load do formulário seja concluído, portanto, você não pode usar diretamente o método SetFocus para mover o foco para o formulário que está sendo carregado durante o evento Form_Load. Ou um controle no formulário. O formulário deve ser exibido com o método Show antes que o foco possa ser definido no formulário ou nos controles do formulário. Por exemplo, para o formulário mostrado na Figura 2-36, escreva o seguinte procedimento de evento:
Sub Form_Load privado ()
Command2.SetFocus
End Sub
A intenção original do programador era mover diretamente o foco para Command2 depois que o programa começou a ser executado, mas o objetivo não foi alcançado. Depois que o programa é executado, uma mensagem de erro é exibida, conforme mostrado na Figura 2-37.
Para resolver este problema, o foco deve estar visível na forma de vida anterior, o que pode ser alcançado através do método Show. O programa acima deve ser:
Sub Form_Load privado ()
Form1.Show
Command2.SetFocus
End Sub
2 Ordem de tabulação
Quando houver vários controles no formulário, clique em um controle com o mouse para mover o foco para o controle (assumindo que o controle pode obter o foco). Além do mouse, você também pode usar a tecla Tab para mover o foco para um controle. Cada vez que você pressiona a tecla Tab, o foco se move de um controle para outro. A chamada ordem Tab refere-se à ordem em que o foco se move entre os vários controles quando a tecla Tab é pressionada.
Em geral, a ordem das guias é determinada pela ordem em que o controle foi criado. Por exemplo, suponha que 5 controles sejam criados no formulário, incluindo 3 caixas de texto e dois botões de comando. A ordem de criação é:
Texto1 、 Texto2 、 Texto3 、 Comando1 、 Comando2
程序执行时,光标默认地位于Text1中,每按一次Tab键,焦点就按Text2、Text3、Command1、Command2的顺序移动。当焦点位于Command2时,如果按Tab键,则焦点又回到Text1。如前所述,除计时器、菜单、框架、标签等不接收焦点的控件外,其他控件均支持Tab顺序。
可以获得焦点的控件都有一种称为“TabStop”的属性,用它可以控制焦点的移动。该属性的缺省值为True,如果把它设置为False,则在用Tab键移动焦点时会跳过该控件。TabStop属性为False的控件,仍然保持它在实际的Tab顺序中的位置,只不过在按Tab键时这个控件被跳过。
在设计模式下,可以通过属性窗口中的TabIndex属性来改变Tab顺序。在前面的例子中,如果把Command2的TabIndex由4改为0,把Text1的TabIndex由0改为1,把Text2的TabIndex由1改为2,把Text3的TabIndex由2改为3,把Command1的TabIndex由3改为4。则程序运行时Tab顺序变为Command2 →Text1→Text2→Text3→Command1。
不能获得焦点的控件以及无效的和不可见的控件,不具有TabIndex属性,因而不包含在Tab顺序中,按Tab键时,这样的控件将被跳过。