ID do artigo: 871045 - Última revisão: sexta-feira, 18 de maio de 2007 - Revisão: 1.3

Erro: Um formulário MDI filho não pode maximizar se o formulário filho contiver um controle ActiveX no Visual Studio .NET 2003

Nesta página

Expandir tudo | Recolher tudo

Sintomas

Quando você usa um controle ActiveX em um formulário filho de interface de documentos múltiplos (MDI) no Microsoft Visual Studio .NET 2003, poderá detectar os seguintes problemas:
  • Não pode maximizar o formulário MDI filho.
  • Você não pode alterar foco para outro inativo MDI filho formulário se você clicar em área cliente do inativo formulário filho MDI.

Causa

Esse problema ocorre porque o aplicativo não pode tratar formulários como formulários de filho MDI corretos quando as seguintes condições forem verdadeiras:
  • Você trabalha com formulários do Microsoft Windows no modo MDI no Visual Studio .NET 2003.
  • Usar um controle ActiveX em um formulário do filho MDI.

Como Contornar

Para contornar este problema, use um dos seguintes métodos:

Método 1

Modificar o código para que você pode maximizar o formulário filho e, em seguida, modifique o código para que você pode obter o foco de um formulário filho inativo:
  • Para maximizar a um formulário filho, altere o código na seção etapa 14 do "Mais informações" para o seguinte:
    Dim frm As Form2
    frm = New Form2
    frm.MdiParent = Me
    frm.WindowState = FormWindowState.Maximized
    frm.Show()
    Observação A propriedade MdiParent é usada para especificar que o formulário Form2 seja um formulário filho.
  • Para obter o foco de um formulário filho inativos clicando na área cliente do formulário filho, adicione código para o formulário filho:
    1. No Solution Explorer, clique com o botão direito no arquivo Form2.vb e, em seguida, clique em View Code .
    2. Localize o código a seguir no Form2 classe:
      Public Class Form2
          Inherits System.Windows.Forms.Form
    3. Adicione o seguinte código após o código localizado na etapa 2:
      Private Const WM_MOUSEACTIVATE As Integer = &H21
      
          Protected Overrides Sub WndProc(ByRef m As Message)
              If m.Msg = WM_MOUSEACTIVATE Then
                  Me.Focus()
              End If
              MyBase.WndProc(m)
      End Sub
      WM_MOUSEACTIVATE a mensagem é enviada quando o ponteiro está em uma janela inativa e o usuário clica em um botão do mouse. O método WndProc ativa o atual formulário filho MDI se o método WndProc recebe o WM_MOUSEACTIVATE mensagem.

Método 2

Defina a propriedade MdiParent e WindowState propriedade do formulário filho antes de chamar o método InitializeComponent no formulário filho. Para fazer isso, você deve escrever código que cria um construtor que usa a propriedade MdiParent e a propriedade WindowState como argumentos e que cria um formulário como um formulário MDI filho:
  1. No Solution Explorer, clique com o botão direito no arquivo Form2.vb e, em seguida, clique em View Code .
  2. Localize o código a seguir no Form2 classe:
    Public Class Form2
        Inherits System.Windows.Forms.Form
  3. Adicione o seguinte código após o código localizado na etapa 2:
    Public Sub New(ByVal mdiParent As Form, ByVal initialState As FormWindowState)
            MyBase.New()
    
            Me.MdiParent = mdiParent
            Me.WindowState = initialState
    
            InitializeComponent()
    
    End Sub
    o construtor inicializa a propriedade MdiParent do formulário filho para especificar o formulário pai. O construtor inicializa também a propriedade WindowState do formulário filho antes do construtor chama o método InitializeComponent .
  4. Altere o código na seção etapa 14 do "Mais informações" para o seguinte:
    Dim frm As Form2
    frm = New Form2(Me, FormWindowState.Maximized)
    frm.Show()
Você deve alterar o código em todos os formulários de filho MDI que contêm um controle ActiveX se você quiser solucionar os problemas que menciona a seção "Sintomas".

Situação

A Microsoft confirmou que este é um problema nos produtos da Microsoft listados na seção "Aplica-se a".

Mais Informações

Etapas para reproduzir o comportamento

  1. Inicie o Visual Studio .NET 2003.
  2. No menu arquivo , aponte para novo e, em seguida, clique em Project . A caixa de diálogo New Project é exibida.
  3. Em Project Types , clique em Projetos do Visual Basic e, em seguida, clique em Windows Application em modelos .
  4. Na caixa nome , digite MyMDIProject e, em seguida, clique em OK . Por padrão, um formulário que é denominado Form1 é criado.
  5. No menu Project , clique em Add Windows Form e em seguida, clique em Abrir . Por padrão, é criado um formulário que é denominado Form2.
  6. No menu Exibir , clique em caixa de ferramentas .
  7. Clique com o botão direito da caixa de ferramentas e clique em Adicionar ou remover itens . A caixa de diálogo Customize Toolbox será exibida.
  8. Na caixa de diálogo Personalizar caixa de ferramentas , clique na guia COM Components .
  9. Na guia Componentes COM , clique duas vezes Microsoft Data e hora selecionador controle 6.0 (SP6) e, em seguida, clique em OK . O Microsoft Data e hora selecionador controle 6.0 (SP6) é exibido em Meus controles de usuário na caixa de ferramentas.
  10. Clique duas vezes em Microsoft Data e hora selecionador controle 6.0 (SP6) para adicionar o Microsoft Data e hora selecionador controle 6.0 (SP6) controle para o Form2.
  11. Na caixa de diálogo Propriedades do Form1, defina a propriedade IsMdiContainer como true.
  12. Adicione um controle MainMenu para o Form1.
  13. Clique em controle MainMenu e defina a propriedade Text de MenuItem1 para novo .
  14. No formulário Form1, clique duas vezes em novo e, em seguida, adicione o código a seguir ao manipulador de evento MenuItem1_Click no formulário Form1:
    Dim frm As Form2
    frm = New Form2
    frm.WindowState = FormWindowState.Maximized
    frm.MdiParent = Me
    frm.Show()
  15. No menu arquivo , clique em Salvar tudo para salvar todos os arquivos.
  16. No menu Build , clique em Build Solution .
  17. No menu Debug , clique em Iniciar .
  18. Clique em novo na barra de menu do Form1. Uma janela filho de Form2 aparece.

    A janela Form2 não estiver maximizada. No entanto, você pode maximizá-lo manualmente. Se você tiver vários MDI formulários filho, você não pode alterar foco para outro formulário filho clicando na área cliente do formulário filho. No entanto, você pode alterar o foco se você clicar na barra de título do formulário filho inativo.

Referências

Para obter mais informações, visite os seguintes sites do Microsoft Developer Network (MSDN) da:
Criação de formulários MDI pai
http://msdn2.microsoft.com/en-us/library/aa984330(VS.71).aspx (http://msdn2.microsoft.com/en-us/library/aa984330(VS.71).aspx)
Criar Formulários de filho MDI
http://msdn2.microsoft.com/en-us/library/aa984329(VS.71).aspx (http://msdn2.microsoft.com/en-us/library/aa984329(VS.71).aspx)

A informação contida neste artigo aplica-se a:
  • Microsoft Visual Studio .NET 2003 Professional Edition
  • Microsoft Visual Studio .NET 2003 Enterprise Architect
  • Microsoft Visual Studio .NET 2003 Enterprise Developer
  • Microsoft Visual Studio .NET 2003 Academic Edition
Palavras-chave: 
kbmt kbvs2005swept kbvs2005doesnotapply kbforms kbbug kbtshoot KB871045 KbMtpt
Tradução automáticaTradução automática
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: 871045  (http://support.microsoft.com/kb/871045/en-us/ )
 

Traduções deste artigo

 

Related Support Centers