CORRECÇÃO:, Não é possível deslocar para baixo um formulário de subordinado MDI clicando na seta de deslocamento para baixo

Traduções de Artigos Traduções de Artigos
Artigo: 839577 - Ver produtos para os quais este artigo se aplica.
Expandir tudo | Reduzir tudo

Nesta página

Sintomas

Quando um utilizador o controlo está presente num formulário subordinado MDI (Multiple Document Interface), se não consegue desloca para baixo. Este problema ocorre quando o controlo de utilizador tem o foco. Tenta deslocar para baixo utilizando a seta de deslocamento para baixo na barra de deslocamento do formulário subordinado, mas não é possível deslocar para baixo.

Causa

Quando um utilizador o controlo contém o foco, o controlo de utilizador é um controlo activo. No entanto, quando o controlo de utilizador contém o foco, a propriedade ActiveControl.Focused que existe no Microsoft .NET Framework 1.1 devolve FALSE em vez de devolver VERDADEIRO. Por conseguinte, concentrando-se ao utilizador controlo força o formulário para tornar visível o controlo de utilizador. Este problema ocorre quando efectua uma operação pendente de deslocamento clicando na seta de deslocamento para baixo.

Resolução

Para resolver este problema, obtenha o service pack mais recente para o Microsoft .NET Framework 1.1. O ficheiro seguinte está disponível para transferência a partir do Centro de transferências da Microsoft:

Microsoft .NET Framework 1.1 Service Pack 1
http://www.microsoft.com/downloads/details.aspx?FamilyId=A8F5654F-088E-40B2-BBDB-A83353618B38

Ponto Da Situação

A Microsoft confirmou que este é um problema nos produtos da Microsoft listados na secção "Aplica-se a". Este problema foi primeiro corrigido no Microsoft .NET Framework 1.1 Service Pack 1.

Mais Informação

Passos para reproduzir o problema

  1. Crie um ficheiro de controlo do utilizador. Para o fazer, siga estes passos:
    1. Inicie o Microsoft Visual Studio NET..
    2. No menu ficheiro , aponte para Novo e, em seguida, clique em projecto .

      A caixa de diálogo novo projecto é apresentada.
    3. Em Project Types , clique em Projectos do Visual Basic .
    4. Em modelos , clique em Windows biblioteca de controlos .
    5. Na caixa nome , escreva testusercontrol e, em seguida, clique em OK .

      Por predefinição, o ficheiro é denominado Usercontrol1.vb é apresentado.
    6. Adicionar um controlo caixa de texto para o Usercontrol1.vb [estrutura] ficheiro.
    7. No menu criar , clique em criar soluções .
  2. Adicione uma aplicação do Windows ao projecto. Para o fazer, siga estes passos:
    1. No menu ficheiro , aponte para Adicionar projecto e, em seguida, clique em Novo projecto .

      A caixa de diálogo novo projecto é apresentada.
    2. Em Project Types , clique em Visual Basic Projects .
    3. Em modelos , clique em Windows Application .
    4. Na caixa nome , escreva user_control_scroll_UI e, em seguida, clique em OK .

      Por predefinição, aparece o formulário é denominado Form1.
    5. No Solution Explorer, clique com o botão direito do rato user_control_scroll_UI e, em seguida, clique em Add Reference .

      A caixa de diálogo Adicionar referência do é apresentada.
    6. Clique no separador projectos , clique em Seleccionar e, em seguida, clique em OK para adicionar o testusercontrol para a referência do projecto.
    7. Clique com o botão direito do rato no formulário que é denominado Form1 e clique em Ver código .
    8. Substitua o código existente com o seguinte código:
      Option Strict On
      Option Explicit On 
      
      Public Class MDIChild
          Inherits System.Windows.Forms.Form
      
      #Region " Windows Forms Designer generated code "
      
          Public Sub New()
              MyBase.New()
      
              'This call is required by the Windows Forms Designer.
              InitializeComponent()
      
              'Add any initialization after the InitializeComponent() call.
      
          End Sub
      
          'The Form overrides dispose to clean up the component list.
          Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
              If disposing Then
                  If Not (components Is Nothing) Then
                      components.Dispose()
                  End If
              End If
              MyBase.Dispose(disposing)
          End Sub
      
          'This is required by the Windows Forms Designer.
          Private components As System.ComponentModel.IContainer
      
          'Note The following procedure is required by the Windows Forms Designer.
          'The following procedure can be modified by using the Windows Forms Designer.  
          'Do not modify the following procedure by using the code editor.
          Friend WithEvents UserControl11 As testusercontrol.UserControl1
          Friend WithEvents TextBox1 As System.Windows.Forms.TextBox
          Friend WithEvents TextBox2 As System.Windows.Forms.TextBox
          Friend WithEvents TextBox3 As System.Windows.Forms.TextBox
          Friend WithEvents TextBox4 As System.Windows.Forms.TextBox
          Friend WithEvents TextBox5 As System.Windows.Forms.TextBox
          Friend WithEvents TextBox6 As System.Windows.Forms.TextBox
          Friend WithEvents UserControl12 As testusercontrol.UserControl1
          <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()
              Me.UserControl11 = New testusercontrol.UserControl1
              Me.TextBox1 = New System.Windows.Forms.TextBox
              Me.TextBox2 = New System.Windows.Forms.TextBox
              Me.TextBox3 = New System.Windows.Forms.TextBox
              Me.TextBox4 = New System.Windows.Forms.TextBox
              Me.TextBox5 = New System.Windows.Forms.TextBox
              Me.TextBox6 = New System.Windows.Forms.TextBox
              Me.UserControl12 = New testusercontrol.UserControl1
              Me.SuspendLayout()
              '
              'UserControl11
              '
              Me.UserControl11.Location = New System.Drawing.Point(26, 30)
              Me.UserControl11.Name = "UserControl11"
              Me.UserControl11.Size = New System.Drawing.Size(104, 24)
              Me.UserControl11.TabIndex = 0
              '
              'TextBox1
              '
              Me.TextBox1.Location = New System.Drawing.Point(26, 161)
              Me.TextBox1.Name = "TextBox1"
              Me.TextBox1.TabIndex = 1
              Me.TextBox1.Text = "TextBox1"
              '
              'TextBox2
              '
              Me.TextBox2.Location = New System.Drawing.Point(26, 384)
              Me.TextBox2.Name = "TextBox2"
              Me.TextBox2.Size = New System.Drawing.Size(103, 20)
              Me.TextBox2.TabIndex = 2
              Me.TextBox2.Text = "TextBox2"
              '
              'TextBox3
              '
              Me.TextBox3.Location = New System.Drawing.Point(26, 541)
              Me.TextBox3.Name = "TextBox3"
              Me.TextBox3.TabIndex = 3
              Me.TextBox3.Text = "TextBox3"
              '
              'TextBox4
              '
              Me.TextBox4.Location = New System.Drawing.Point(26, 725)
              Me.TextBox4.Name = "TextBox4"
              Me.TextBox4.TabIndex = 4
              Me.TextBox4.Text = "TextBox4"
              '
              'TextBox5
              '
              Me.TextBox5.Location = New System.Drawing.Point(26, 929)
              Me.TextBox5.Name = "TextBox5"
              Me.TextBox5.TabIndex = 5
              Me.TextBox5.Text = "TextBox5"
              '
              'TextBox6
              '
              Me.TextBox6.Location = New System.Drawing.Point(26, 1394)
              Me.TextBox6.Name = "TextBox6"
              Me.TextBox6.TabIndex = 7
              Me.TextBox6.Text = "TextBox6"
              '
              'UserControl12
              '
              Me.UserControl12.Location = New System.Drawing.Point(26, 1142)
              Me.UserControl12.Name = "UserControl12"
              Me.UserControl12.Size = New System.Drawing.Size(103, 27)
              Me.UserControl12.TabIndex = 6
              '
              'MDIChild
              '
              Me.AutoScaleBaseSize = New System.Drawing.Size(5, 13)
              Me.AutoScroll = True
              Me.ClientSize = New System.Drawing.Size(275, 266)
              Me.Controls.Add(Me.UserControl12)
              Me.Controls.Add(Me.TextBox6)
              Me.Controls.Add(Me.TextBox5)
              Me.Controls.Add(Me.TextBox4)
              Me.Controls.Add(Me.TextBox3)
              Me.Controls.Add(Me.TextBox2)
              Me.Controls.Add(Me.TextBox1)
              Me.Controls.Add(Me.UserControl11)
              Me.Name = "MDIChild"
              Me.Text = "MDIChild"
              Me.ResumeLayout(False)
      
          End Sub
      
      #End Region
      
      End Class
      
    9. No Solution Explorer, clique com o botão direito do rato user_control_scroll_UI , aponte para Adicionar e, em seguida, clique em Adicionar novo item .

      A caixa de diálogo Add New Item - user_control_scroll_UI aparece.
    10. Na caixa nome , escreva mdi.vb e, em seguida, clique em Abrir .

      O ficheiro é denominado mdi.vb é apresentado.
    11. No Solution Explorer, com o botão direito do rato no formulário denominado mdi.vb e, em seguida, clique em Código .
    12. Substitua o código existente com o seguinte código:
      Option Strict On
      Option Explicit On 
      
      Public Class MDI
          Inherits System.Windows.Forms.Form
      
      #Region " Windows Forms Designer generated code "
      
          Public Sub New()
              MyBase.New()
      
              'This call is required by the Windows Forms Designer.
              InitializeComponent()
      
              'Add any initialization after the InitializeComponent() call.
      
          End Sub
      
          'The Form overrides dispose to clean up the component list.
          Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
              If disposing Then
                  If Not (components Is Nothing) Then
                      components.Dispose()
                  End If
              End If
              MyBase.Dispose(disposing)
          End Sub
      
          'This is required by the Windows Forms Designer.
          Private components As System.ComponentModel.IContainer
      
          'Note The following procedure is required by the Windows Forms Designer
          'The following procedure can be modified by using the Windows Forms Designer.  
          'Do not modify the following procedure by using the code editor.
          Friend WithEvents MainMenu1 As System.Windows.Forms.MainMenu
          Friend WithEvents mnuAutoScroll As System.Windows.Forms.MenuItem
          Friend WithEvents mnuVScroll As System.Windows.Forms.MenuItem
          <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()
              Me.MainMenu1 = New System.Windows.Forms.MainMenu
              Me.mnuAutoScroll = New System.Windows.Forms.MenuItem
              Me.mnuVScroll = New System.Windows.Forms.MenuItem
              '
              'MainMenu1
              '
              Me.MainMenu1.MenuItems.AddRange(New System.Windows.Forms.MenuItem() {Me.mnuAutoScroll, Me.mnuVScroll})
              '
              'mnuAutoScroll
              '
              Me.mnuAutoScroll.Index = 0
              Me.mnuAutoScroll.Text = "Load AutoScroll Child"
              '
              'mnuVScroll
              '
              Me.mnuVScroll.Index = 1
              Me.mnuVScroll.Text = "Load VScroll Child"
              '
              'MDI
              '
              Me.AutoScaleBaseSize = New System.Drawing.Size(5, 13)
              Me.ClientSize = New System.Drawing.Size(366, 299)
              Me.IsMdiContainer = True
              Me.Menu = Me.MainMenu1
              Me.Name = "MDI"
              Me.Text = "MDI"
      
          End Sub
      
      #End Region
      
      
          Private Sub MDI_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load
          End Sub
      
          Private Sub mnuAutoScroll_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnuAutoScroll.Click
              Dim currentForm As New MDIChild
      
              currentForm.MdiParent = Me
              currentForm.WindowState = FormWindowState.Maximized
              currentForm.Show()
              currentForm.BringToFront()
          End Sub
      
          Private Sub mnuVScroll_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnuVScroll.Click
              Dim currentForm As New VScrollChild
      
              currentForm.MdiParent = Me
              currentForm.WindowState = FormWindowState.Maximized
              currentForm.Show()
              currentForm.BringToFront()
          End Sub
      End Class
      
    13. No Solution Explorer, clique com o botão direito do rato user_control_scroll_UI , aponte para Adicionar e, em seguida, clique em Adicionar novo item .

      A caixa de diálogo Add New Item - user_control_scroll_UI aparece.
    14. Na caixa nome , escreva Vscroll.vb e, em seguida, clique em Abrir .

      O ficheiro é denominado Vscroll.vb é apresentado.
    15. No Solution Explorer, com o botão direito do rato no formulário denominado Vscroll.vb e, em seguida, clique em Código .
    16. Substitua o código existente com o seguinte código:
      ption Strict On
      Option Explicit On 
      
      Public Class VScrollChild
          Inherits System.Windows.Forms.Form
      
      #Region " Windows Forms Designer generated code "
      
          Public Sub New()
              MyBase.New()
      
              'This call is required by the Windows Forms Designer.
              InitializeComponent()
      
              'Add any initialization after the InitializeComponent() call.
      
          End Sub
      
          'The form overrides dispose to clean up the component list.
          Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
              If disposing Then
                  If Not (components Is Nothing) Then
                      components.Dispose()
                  End If
              End If
              MyBase.Dispose(disposing)
          End Sub
      
          'This is required by the Windows Forms Designer.
          Private components As System.ComponentModel.IContainer
      
          'Note The following procedure is required by the Windows Forms Designer.
          'The following procedure can be modified by using the Windows Forms Designer.  
          'Do not modify the following procedure by using the code editor.
          Friend WithEvents TextBox1 As System.Windows.Forms.TextBox
          Friend WithEvents TextBox2 As System.Windows.Forms.TextBox
          Friend WithEvents TextBox3 As System.Windows.Forms.TextBox
          Friend WithEvents TextBox4 As System.Windows.Forms.TextBox
          Friend WithEvents TextBox5 As System.Windows.Forms.TextBox
          Friend WithEvents TextBox6 As System.Windows.Forms.TextBox
          Friend WithEvents testUcNum1 As testusercontrol.UserControl1
          Friend WithEvents VScrollBar1 As System.Windows.Forms.VScrollBar
          Friend WithEvents testUcNum2 As testusercontrol.UserControl1
          <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()
              Me.testUcNum1 = New testusercontrol.UserControl1
              Me.TextBox1 = New System.Windows.Forms.TextBox
              Me.TextBox2 = New System.Windows.Forms.TextBox
              Me.TextBox3 = New System.Windows.Forms.TextBox
              Me.TextBox4 = New System.Windows.Forms.TextBox
              Me.TextBox5 = New System.Windows.Forms.TextBox
              Me.TextBox6 = New System.Windows.Forms.TextBox
              Me.VScrollBar1 = New System.Windows.Forms.VScrollBar
              Me.testUcNum2 = New testusercontrol.UserControl1
              Me.SuspendLayout()
              '
              'testUcNum1
              '
              Me.testUcNum1.Location = New System.Drawing.Point(26, 30)
              Me.testUcNum1.Name = "testUcNum1"
              Me.testUcNum1.Size = New System.Drawing.Size(104, 24)
              Me.testUcNum1.TabIndex = 0
              '
              'TextBox1
              '
              Me.TextBox1.Location = New System.Drawing.Point(26, 161)
              Me.TextBox1.Name = "TextBox1"
              Me.TextBox1.TabIndex = 1
              Me.TextBox1.Text = "TextBox1"
              '
              'TextBox2
              '
              Me.TextBox2.Location = New System.Drawing.Point(26, 384)
              Me.TextBox2.Name = "TextBox2"
              Me.TextBox2.Size = New System.Drawing.Size(103, 20)
              Me.TextBox2.TabIndex = 2
              Me.TextBox2.Text = "TextBox2"
              '
              'TextBox3
              '
              Me.TextBox3.Location = New System.Drawing.Point(26, 541)
              Me.TextBox3.Name = "TextBox3"
              Me.TextBox3.TabIndex = 3
              Me.TextBox3.Text = "TextBox3"
              '
              'TextBox4
              '
              Me.TextBox4.Location = New System.Drawing.Point(26, 725)
              Me.TextBox4.Name = "TextBox4"
              Me.TextBox4.TabIndex = 4
              Me.TextBox4.Text = "TextBox4"
              '
              'TextBox5
              '
              Me.TextBox5.Location = New System.Drawing.Point(26, 929)
              Me.TextBox5.Name = "TextBox5"
              Me.TextBox5.TabIndex = 5
              Me.TextBox5.Text = "TextBox5"
              '
              'TextBox6
              '
              Me.TextBox6.Location = New System.Drawing.Point(26, 1394)
              Me.TextBox6.Name = "TextBox6"
              Me.TextBox6.TabIndex = 7
              Me.TextBox6.Text = "TextBox6"
              '
              'VScrollBar1
              '
              Me.VScrollBar1.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Bottom) _
                          Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
              Me.VScrollBar1.Location = New System.Drawing.Point(224, 0)
              Me.VScrollBar1.Name = "VScrollBar1"
              Me.VScrollBar1.Size = New System.Drawing.Size(17, 266)
              Me.VScrollBar1.TabIndex = 8
              '
              'testUcNum2
              '
              Me.testUcNum2.Location = New System.Drawing.Point(27, 639)
              Me.testUcNum2.Name = "testUcNum2"
              Me.testUcNum2.Size = New System.Drawing.Size(104, 24)
              Me.testUcNum2.TabIndex = 9
              '
              'VScrollChild
              '
              Me.AutoScaleBaseSize = New System.Drawing.Size(5, 13)
              Me.ClientSize = New System.Drawing.Size(241, 266)
              Me.Controls.Add(Me.testUcNum2)
              Me.Controls.Add(Me.VScrollBar1)
              Me.Controls.Add(Me.TextBox6)
              Me.Controls.Add(Me.TextBox5)
              Me.Controls.Add(Me.TextBox4)
              Me.Controls.Add(Me.TextBox3)
              Me.Controls.Add(Me.TextBox2)
              Me.Controls.Add(Me.TextBox1)
              Me.Controls.Add(Me.testUcNum1)
              Me.Name = "VScrollChild"
              Me.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Show
              Me.Text = "MDIChild"
              Me.ResumeLayout(False)
      
          End Sub
      
      #End Region
      
          Private htControlTops As New Hashtable
      
          'Note The following assumes that no controls are put above the form the first time. For example, there are no negative .Top values.
          '      If this is not the case, a similar "topLine" variable is required to make sure that 
          '      you know the full length of the useful area of the form.
          '                            bottomMostCtl.Top + bottomMostCtl.Height - topMostCtl.Top
          '      This calculation is not required on this form.
          Private bottomLine As Integer = Integer.MinValue
      
          Private Sub MDIChild_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load
              For Each ctl As Control In Me.Controls
                  If TypeOf ctl Is testusercontrol.UserControl1 _
                      OrElse TypeOf ctl Is TextBox Then
      
                      htControlTops.Add(ctl.Name, ctl.Top)
                      Debug.WriteLine("MDIChild_Load => Ctl Name: " & ctl.Name & ", Top=" & ctl.Top)
      
                      If (ctl.Top + ctl.Height) > bottomLine Then
                          bottomLine = ctl.Top + ctl.Height
                      End If
                  End If
              Next
          End Sub
      
          Private Sub VScrollBar1_Scroll(ByVal sender As System.Object, ByVal e As System.Windows.Forms.ScrollEventArgs) Handles VScrollBar1.Scroll
              Debug.WriteLine("*** VScrollBar1_Scroll event fired! (New Value: " & e.NewValue & ")")
              ScrollForMe(e.NewValue)
          End Sub
      
          Private Sub ScrollForMe(ByVal scrollValue As Integer)
              Dim oldTop As Integer
              Dim pct As Double = scrollValue / VScrollBar1.Maximum
              'Debug.WriteLine(">>> Percentage Scroll: " & Format(pct, "00.0%") & " <<<")
              Dim incr As Integer = CInt(pct * bottomLine)
              'Debug.WriteLine(">>> Increment value: " & incr & " <<<")
      
              For Each ctl As Control In Me.Controls
                  If TypeOf ctl Is testusercontrol.UserControl1 _
                      OrElse TypeOf ctl Is TextBox Then
      
                      oldTop = CType(htControlTops(ctl.Name), Integer)
                      ctl.Top = oldTop - incr
                      'Debug.WriteLine("VScrollBar1_Scroll => Ctl Name: " & ctl.Name & ", Top=" & ctl.Top)
                  End If
              Next
          End Sub
      
      End Class
      
  3. Criar a solução e, em seguida, execute o projecto. Para o fazer, siga estes passos:
    1. No Solution Explorer, clique em solução 'testusercontrol' (2 projectos) .
    2. No menu projecto , clique em Propriedades .

      O solução 'testusercontrol' propriedade páginas é apresentada a caixa de diálogo.
    3. No painel da esquerda, faça duplo clique em Projecto de arranque em propriedades comuns e, em seguida, clique em user_control_scroll_UI .
    4. No painel esquerda, faça duplo clique Dependências do projecto em Propriedades comuns .
    5. No painel da direita, clique testusercontrol na lista projecto e, em seguida, clique em OK .
    6. No Solution Explorer, clique com o botão direito do rato user_control_scroll_UI e, em seguida, clique em Propriedades .

      O user_control_scroll_UI propriedades páginas é apresentada a caixa de diálogo.
    7. No painel esquerda, faça duplo clique Geral em propriedades comuns .
    8. No painel direito, clique em MDI na caixa objecto de arranque .
    9. No menu criar , clique em criar soluções .
    10. Prima F5 para executar o programa.

      MDI aparece o formulário.
    11. Clique em O deslocamento automático subordinado , clique na seta de deslocamento pendente para tentar percorrer o formulário.

      Repare o comportamento mencionado na secção "Sintomas".

Referências

Para obter informações adicionais sobre como criar formulários subordinados MDI, visite o seguinte Web site da Microsoft Developer Network (MSDN):
http://msdn2.microsoft.com/en-us/library/aa984329(VS.71).aspx
Para obter informações adicionais, clique no número de artigo que se segue para visualizar o artigo na Microsoft Knowledge Base:
824684Descrição da terminologia padrão utilizada para descrever actualizações de software da Microsoft

Propriedades

Artigo: 839577 - Última revisão: 18 de maio de 2007 - Revisão: 2.2
A informação contida neste artigo aplica-se a:
  • Microsoft .NET Framework 1.1
Palavras-chave: 
kbmt kbqfe kbhotfixserver kbmdi kbnetframe110sp1fix kbscrollbar kbcontrol kbforms kbbug kbfix kbnetframe110presp1fix KB839577 KbMtpt
Traduçã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 revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática? erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 839577

Submeter comentários

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com