REVISIÓN: Se no desplácese hacia abajo un formulario MDI secundario haciendo clic en la flecha de desplazamiento hacia abajo

Seleccione idioma Seleccione idioma
Id. de artículo: 839577 - Ver los productos a los que se aplica este artículo
Expandir todo | Contraer todo

En esta página

Síntomas

Cuando un control de usuario está presente en un formulario de secundarios de interfaz de múltiples documentos (MDI), no puede desplácese hacia abajo. Este problema se produce cuando el control de usuario contiene el foco. Intentar desplazarse utilizando la flecha de desplazamiento hacia abajo en la barra de desplazamiento del formulario secundario, pero no puede desplazarse hacia abajo.

Causa

Cuando un control de usuario contiene el enfoque, el control de usuario es un control activo. Sin embargo, cuando el control de usuario contiene el enfoque, la propiedad ActiveControl.Focused que está presente en Microsoft .NET Framework 1.1 devuelve False en lugar de devolver true. Por lo tanto, centra el control de usuario fuerza el formulario para hacer que el control de usuario visible. Este problema se produce cuando realiza una operación de desplazamiento hacia abajo haciendo clic en la flecha de desplazamiento hacia abajo.

Solución

Para resolver este problema, obtenga el service pack más reciente para Microsoft .NET Framework 1.1. El archivo siguiente está disponible para descargarlo del Centro de descarga de Microsoft:

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

Estado

Microsoft ha confirmado que se trata de un problema de los productos de Microsoft enumerados en la sección "La información de este artículo se refiere a:". Este problema se corrigió por primera vez en Microsoft .NET Framework 1.1 Service Pack 1.

Más información

Pasos para reproducir el problema

  1. Crear un archivo de control de usuario. Para ello, siga estos pasos:
    1. Inicie Microsoft Visual Studio NET..
    2. En el menú archivo , seleccione nuevo y, a continuación, haga clic en proyecto .

      Aparecerá el cuadro de diálogo nuevo proyecto .
    3. En Tipos de proyecto , haga clic en Proyectos de Visual Basic .
    4. En plantillas , haga clic en Windows Control Library .
    5. En el cuadro nombre , escriba testusercontrol y, a continuación, haga clic en Aceptar .

      De forma predeterminada, el archivo que se denomina Usercontrol1.vb aparece.
    6. Agregar un control TextBox a la Usercontrol1.vb [Diseño] archivo.
    7. En el menú Generar , haga clic en Generar soluciones .
  2. Agregar una aplicación de Windows al proyecto. Para ello, siga estos pasos:
    1. En el menú archivo , elija Agregar proyecto y a continuación, haga clic en Nuevo proyecto .

      Aparecerá el cuadro de diálogo nuevo proyecto .
    2. En Tipos de proyecto , haga clic en proyectos de Visual Basic .
    3. En plantillas , haga clic en Windows Application .
    4. En el cuadro nombre , escriba user_control_scroll_UI y, a continuación, haga clic en Aceptar .

      De forma predeterminada, aparece el formulario que se denomina Form1.
    5. En el Explorador de soluciones, haga clic con el botón secundario del mouse en user_control_scroll_UI y, a continuación, haga clic en Agregar referencia .

      Aparecerá el cuadro de diálogo Agregar referencia .
    6. Haga clic en la ficha proyectos , haga clic en Seleccionar y, a continuación, haga clic en Aceptar para agregar el testusercontrol a la referencia de proyecto.
    7. Haga clic con el botón secundario en el formulario que se denomina Form1 y haga clic en Ver código .
    8. Reemplace el código existente con el código siguiente:
      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. En el Explorador de soluciones, haga clic con el botón secundario del mouse en user_control_scroll_UI , elija Agregar y, a continuación, haga clic en Agregar nuevo elemento .

      Aparecerá el el cuadro de diálogo Agregar nuevo elemento - user_control_scroll_UI .
    10. En el cuadro nombre , escriba mdi.vb y a continuación, haga clic en Abrir .

      El archivo que se denomina mdi.vb aparece.
    11. En el Explorador de soluciones, haga clic con el botón secundario en el formulario que se denomina mdi.vb y, a continuación, haga clic en Ver código .
    12. Reemplace el código existente con el código siguiente:
      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. En el Explorador de soluciones, haga clic con el botón secundario del mouse en user_control_scroll_UI , elija Agregar y, a continuación, haga clic en Agregar nuevo elemento .

      Aparecerá el el cuadro de diálogo Agregar nuevo elemento - user_control_scroll_UI .
    14. En el cuadro nombre , escriba vscroll.vb y a continuación, haga clic en Abrir .

      El archivo que se denomina vscroll.vb aparece.
    15. En el Explorador de soluciones, haga clic con el botón secundario en el formulario que se denomina vscroll.vb y, a continuación, haga clic en Ver código .
    16. Reemplace el código existente con el código siguiente:
      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. Genere la solución y, a continuación, ejecute el proyecto. Para ello, siga estos pasos:
    1. En Explorador de soluciones, haga clic en solución 'testusercontrol' (2 proyectos) .
    2. En el menú proyecto , haga clic en Propiedades .

      El soluciones 'testusercontrol' propiedad páginas aparecerá el cuadro de diálogo.
    3. En el panel izquierdo, haga doble clic en Proyecto de inicio bajo Propiedades comunes y, a continuación, haga clic en user_control_scroll_UI .
    4. En el panel izquierdo, haga doble clic en Dependencias del proyecto bajo Propiedades comunes .
    5. En el panel derecho, haga clic en testusercontrol en la lista proyecto y, a continuación, haga clic en Aceptar .
    6. En el Explorador de soluciones, haga clic con el botón secundario del mouse en user_control_scroll_UI y a continuación, haga clic en Propiedades .

      El user_control_scroll_UI propiedad páginas aparecerá el cuadro de diálogo.
    7. En el panel izquierdo, haga doble clic en General bajo Propiedades comunes .
    8. En el panel derecho, haga clic en MDI en el cuadro objeto de inicio .
    9. En el menú Generar , haga clic en Generar soluciones .
    10. Presione F5 para ejecutar el programa.

      La MDI aparece el formulario.
    11. Haga clic en Carga AutoScroll secundario , haga clic en la flecha de desplazamiento para desplazarse por el formulario.

      Observa que el comportamiento que se menciona en la sección "Síntomas".

Referencias

Para obtener información adicional acerca de cómo crear formularios MDI secundarios, visite el siguiente sitio Web de Microsoft Developer Network (MSDN):
http://msdn2.microsoft.com/en-us/library/aa984329(VS.71).aspx
Para obtener información adicional, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
824684Descripción de la terminología estándar utilizada para describir las actualizaciones de software de Microsoft

Propiedades

Id. de artículo: 839577 - Última revisión: viernes, 18 de mayo de 2007 - Versión: 2.2
La información de este artículo se refiere a:
  • Microsoft .NET Framework 1.1
Palabras clave: 
kbmt kbqfe kbhotfixserver kbmdi kbnetframe110sp1fix kbscrollbar kbcontrol kbforms kbbug kbfix kbnetframe110presp1fix KB839577 KbMtes
Traducción automática
IMPORTANTE: Este artículo ha sido traducido por un software de traducción automática de Microsoft (http://support.microsoft.com/gp/mtdetails) en lugar de un traductor humano. Microsoft le ofrece artículos traducidos por un traductor humano y artículos traducidos automáticamente para que tenga acceso en su propio idioma a todos los artículos de nuestra base de conocimientos (Knowledge Base). Sin embargo, los artículos traducidos automáticamente pueden contener errores en el vocabulario, la sintaxis o la gramática, como los que un extranjero podría cometer al hablar el idioma. Microsoft no se hace responsable de cualquier imprecisión, error o daño ocasionado por una mala traducción del contenido o como consecuencia de su utilización por nuestros clientes. Microsoft suele actualizar el software de traducción frecuentemente.
Haga clic aquí para ver el artículo original (en inglés): 839577

Enviar comentarios

 

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