A subclasse janelas no Windows Forms usando Visual Basic .NET ou Visual Basic 2005

IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine Translation ou MT), não tendo sido portanto traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes ao software de tradução automática (MT). Obrigado.

Clique aqui para ver a versão em Inglês deste artigo: 311317
Para uma versão deste artigo do Microsoft Visual Basic 6.0, consulte 179398.

NESTA TAREFA

Sumário
Este artigo passo a passo descreve diversas técnicas de subclassificação estão disponíveis no Visual Basic .NET ou no Visual Basic 2005.

back to the top

Subclasse um controle

  1. Para criar um novo Visual Basic .NET ou Visual Basic 2005 Windows Application é denominado SubclassingDemo, execute essas etapas:
    1. Inicie o Microsoft Visual Studio .NET ou Microsoft Visual Studio 2005.
    2. No menu arquivo , aponte para novo e, em seguida, clique em projetos .
    3. Clique em Projetos do Visual Basic em Tipos de projeto e, em seguida, clique em Windows Application em modelos .

      Observação No Visual Studio 2005, clique em Visual Basic em Tipos de projeto e, em seguida, clique em Windows Application em modelos .
    4. Na caixa nome , digite SubclassingDemo .
  2. Para adicionar um novo módulo de classe para o projeto, clique em Add Class no menu projeto . Na caixa nome , digite SCTextBox.vb .
  3. Substitua WndProc herdada. Para fazer isso, adicione o seguinte código à classe SCTextBox :
    Public Class SCTextBox    Inherits TextBox    Private Const WM_CHAR As Integer = &H102    Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message)        ' See if the CTRL key is being pressed.        If MyClass.ModifierKeys And Keys.Control Then            Select Case m.Msg                Case WM_CHAR                    ' Disable CTRL+X.                    Select Case m.WParam.ToInt32                        Case 24 'X = 24th letter of alphabet                            ' Do nothing here to disable the default message handling.                        Case Else                            'It is important to pass unhandled messages back to the default message handler.                            MyBase.WndProc(m)                    End Select                Case Else                    'It is important to pass unhandled messages back to the default message handler.                    MyBase.WndProc(m)            End Select        Else            'It is important to pass unhandled messages back to the default message handler.            MyBase.WndProc(m)        End If    End SubEnd Class					
  4. Arraste um controle TextBox da caixa de ferramentas para Form1.vb.
  5. Edite código de Form1.vb da seguinte maneira:
    1. Expanda a região que está marcada da seguinte maneira:
      #Region " Windows Form Designer generated code "						
    2. Substitua referências para o controle TextBox padrão por referências para a nova classe SCTextBox . Para fazer isso, substitua todas as ocorrências da classe TextBox SCTextBox no código que é gerado.

      Por exemplo:
          ' Friend WithEvents TextBox1 As TextBox    '    ' is now    Friend WithEvents TextBox1 As SCTextBox    ' Me.TextBox1 = New System.Windows.Forms.TextBox()    '    ' is now    Me.TextBox1 = New SCTextBox()						
  6. Salvar e, em seguida, compile o projeto.
  7. Para testar o aplicativo, pressione F5 ou clique em Iniciar , no menu Debug .
  8. Digite algum texto de exemplo na caixa de texto.
  9. Selecione o texto e, em seguida, pressione CTRL + x. Observe que essa combinação de teclas não exclui o texto.
  10. Clique com o botão direito do mouse na caixa de texto e clique em Recortar . Observe que o texto é excluído.
back to the top

Subclasse um formulário

  1. Para criar um novo Visual Basic .NET ou Visual Basic 2005 Windows Application chamado SubclassingDemo, execute essas etapas:
    1. Inicie o Microsoft Visual Studio .NET ou Microsoft Visual Studio 2005.
    2. No menu arquivo , aponte para novo e, em seguida, clique em projetos .
    3. Clique em Projetos do Visual Basic em Tipos de projeto e, em seguida, clique em Windows Application em modelos .

      Observação No Visual Studio 2005, clique em Visual Basic em Tipos de projeto e, em seguida, clique em Windows Application em modelos .
    4. Na caixa nome , digite SubclassingDemo .
  2. Edite o código de Form1.vb da seguinte maneira:
    1. Expanda a região que está marcada da seguinte maneira:
      #Region " Windows Form Designer generated code"						
    2. Substitua WndProc herdada. Para fazer isso, adicione o procedimento Substitui Sub WndProc à classe Form1 da seguinte maneira:
      Public Class Form1    Inherits System.Windows.Forms.Form  #Region " Windows Form Designer generated code "    Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message)        ' Do whatever custom processing you need for this message.        Debug.WriteLine(m.ToString())        ' Forward message to base WndProc.        MyBase.WndProc(m)    End SubEnd Class						
back to the top

Subclasse qualquer HWND

  1. Adicione um novo módulo de classe chamado SubclassHWND.vb para o Visual Basic .NET ou aplicativo do Visual Basic 2005 . Para fazer isso, clique em Add Class no menu projeto . Na caixa nome , digite SubclassHWND.vb .
  2. Adicione o seguinte código:
    Public Class SubclassHWND    Inherits NativeWindow    Protected Overloads Overrides Sub WndProc(ByRef m As Message)        ' do whatever custom processing you need for        ' this message        Debug.WriteLine(m.ToString())        ' forward message to base WndProc        MyBase.WndProc(m)    End SubEnd Class					
  3. Para demonstrar seu uso, adicione o seguinte código ao evento Form_Load :
    Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load    Dim s As SubclassHWND = New SubclassHWND()    s.AssignHandle(Me.Handle)    ' Now s should be listening to the form's messages.End Sub					
back to the top

Solução de problemas

Gancho global deve adicionar próprio em vários processos, que requerem uma função válida e consistente para chamar. Código gerenciado não tem nenhum conceito de um valor consistente para ponteiros de função, pois esses ponteiros de função são proxies que são criados de forma dinâmica.

back to the top
Referências
Para obter informações adicionais, clique no número abaixo para ler o artigo na Base de dados de Conhecimento da Microsoft:
320583COMO: Interceptação teclas controles .NET usando o Visual Basic .NET

Aviso: este artigo foi traduzido automaticamente

Propriedades

ID do Artigo: 311317 - Última Revisão: 12/06/2006 23:18:25 - Revisão: 2.3

Microsoft Visual Basic .NET 2002 Standard Edition, Microsoft Visual Basic .NET 2003 Standard Edition, Microsoft Visual Basic 2005

  • kbmt kbvs2005swept kbvs2005applies kbhowtomaster KB311317 KbMtpt
Comentários