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.
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.
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:
No Solution Explorer, clique com o botão direito no arquivo Form2.vb e, em seguida, clique em View Code .
Localize o código a seguir no Form2 classe:
Public Class Form2
Inherits System.Windows.Forms.Form
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:
No Solution Explorer, clique com o botão direito no arquivo Form2.vb e, em seguida, clique em View Code .
Localize o código a seguir no Form2 classe:
Public Class Form2
Inherits System.Windows.Forms.Form
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 .
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".
No menu arquivo , aponte para novo e, em seguida, clique em Project . A caixa de diálogo New Project é exibida.
Em Project Types , clique em Projetos do Visual Basic e, em seguida, clique em Windows Application em modelos .
Na caixa nome , digite MyMDIProject e, em seguida, clique em OK . Por padrão, um formulário que é denominado Form1 é criado.
No menu Project , clique em Add Windows Form e em seguida, clique em Abrir . Por padrão, é criado um formulário que é denominado Form2.
No menu Exibir , clique em caixa de ferramentas .
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.
Na caixa de diálogo Personalizar caixa de ferramentas , clique na guia COM Components .
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.
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.
Na caixa de diálogo Propriedades do Form1, defina a propriedade IsMdiContainer como true.
Adicione um controle MainMenu para o Form1.
Clique em controle MainMenu e defina a propriedade Text de MenuItem1 para novo .
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()
No menu arquivo , clique em Salvar tudo para salvar todos os arquivos.
No menu Build , clique em Build Solution .
No menu Debug , clique em Iniciar .
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.
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/
)
O que podemos fazer para melhorar essa informação?
Para proteger sua privacidade, não inclua informações de contato em seus comentários.
Obrigado! Seus comentários são usados para nos ajudar a aperfeiçoar o conteúdo de suporte. Para obter mais opções de ajuda, visite a Home Page de Ajuda e Suporte.