CORRECTIF : vous ne pouvez pas défiler un formulaire enfant MDI en cliquant sur la flèche vers le bas de défilement

IMPORTANT : Cet article est issu du système de traduction automatique mis au point par Microsoft (http://support.microsoft.com/gp/mtdetails). Un certain nombre d’articles obtenus par traduction automatique sont en effet mis à votre disposition en complément des articles traduits en langue française par des traducteurs professionnels. Cela vous permet d’avoir accès, dans votre propre langue, à l’ensemble des articles de la base de connaissances rédigés originellement en langue anglaise. Les articles traduits automatiquement ne sont pas toujours parfaits et peuvent comporter des erreurs de vocabulaire, de syntaxe ou de grammaire (probablement semblables aux erreurs que ferait une personne étrangère s’exprimant dans votre langue !). Néanmoins, mis à part ces imperfections, ces articles devraient suffire à vous orienter et à vous aider à résoudre votre problème. Microsoft s’efforce aussi continuellement de faire évoluer son système de traduction automatique.

La version anglaise de cet article est la suivante: 839577
Cet article a été archivé. Il est proposé « en l'état » et ne sera plus mis à jour.
Symptômes
Lorsqu'un contrôle utilisateur est présent sur un formulaire enfant MDI (multiple document interface), vous ne pouvez pas défiler. Ce problème se produit lorsque le contrôle utilisateur contient le focus. Vous essayez de faire défiler à l'aide la flèche de défilement-vers le bas de la barre de défilement du formulaire enfant, mais vous ne pouvez pas défiler.
Cause
Lorsqu'un contrôle utilisateur contient le focus, le contrôle utilisateur est un contrôle actif. Toutefois, lorsque le contrôle utilisateur contient le focus, la propriété ActiveControl.Focused qui est présente dans le Microsoft .NET Framework 1.1 renvoie False au lieu de renvoyer la valeur True. Par conséquent, notamment le contrôle utilisateur force l'écran pour afficher le contrôle utilisateur. Ce problème se produit lorsque vous effectuez une opération vers le bas de défilement en cliquant sur la flèche vers le bas de défilement.
Résolution
Pour résoudre ce problème, procurez-vous le dernier service pack pour Microsoft .NET Framework 1.1. Le fichier suivant est téléchargeable à partir du Centre de téléchargement Microsoft :

Microsoft .NET Framework 1.1 Service Pack 1
Statut
Microsoft a confirmé que c'est un problème dans les produits Microsoft répertoriés dans la section « S'applique à ». Ce problème a été corrigé dans Microsoft .NET Framework 1.1 Service Pack 1.
Plus d'informations

Procédure pour reproduire le problème

  1. Créer un fichier de contrôle utilisateur. Pour ce faire, procédez comme suit :
    1. Démarrez Microsoft Visual Studio .NET.
    2. Dans le menu Fichier , pointez sur Nouveau , puis cliquez sur projet .

      La boîte de dialogue Nouveau projet s'affiche.
    3. Sous types de projets , cliquez sur projets Visual Basic .
    4. Sous modèles , cliquez sur Windows bibliothèque de contrôles .
    5. Dans la zone Nom , tapez testusercontrol et puis cliquez sur OK .

      Par défaut, le fichier nommé Usercontrol1.vb apparaît.
    6. Ajouter un contrôle zone de texte à la Usercontrol1.vb [création] fichier.
    7. Dans le menu Générer , cliquez sur Créer solution .
  2. Ajouter une application Windows pour le projet. Pour ce faire, procédez comme suit :
    1. Dans le menu Fichier , pointez sur Ajouter Project , puis cliquez sur Nouveau projet .

      La boîte de dialogue Nouveau projet s'affiche.
    2. Sous types de projets , cliquez sur projets Visual Basic .
    3. Sous modèles , cliquez sur Windows Application .
    4. Dans la zone Nom , tapez user_control_scroll_UI et puis cliquez sur OK .

      Par défaut, le formulaire est nommé Form1 s'affiche.
    5. Dans l'Explorateur de solutions, cliquez avec le bouton droit sur user_control_scroll_UI , puis cliquez sur Ajouter une référence .

      La boîte de dialogue Ajouter une référence s'affiche.
    6. Cliquez sur l'onglet projets , cliquez sur sélectionner et puis cliquez sur OK pour ajouter le testusercontrol à votre référence de projet.
    7. Cliquez avec le bouton droit sur le formulaire est nommé Form1 , puis cliquez sur Afficher code .
    8. Remplacez le code existant par le code suivant :
      Option Strict OnOption 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 RegionEnd Class
    9. Dans l'Explorateur de solutions, cliquez avec le bouton droit sur user_control_scroll_UI , pointez sur Ajouter et puis cliquez sur Ajouter un nouvel élément .

      La boîte de dialogue Ajouter un nouvel élément - user_control_scroll_UI s'affiche.
    10. Dans la zone Nom , tapez mdi.vb et puis cliquez sur Ouvrir .

      Le fichier est nommé mdi.vb apparaît.
    11. Dans l'Explorateur de solutions, cliquez avec le bouton droit sur le formulaire est nommé mdi.vb , puis cliquez sur Afficher le code .
    12. Remplacez le code existant par le code suivant :
      Option Strict OnOption 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 SubEnd Class
    13. Dans l'Explorateur de solutions, cliquez avec le bouton droit sur user_control_scroll_UI , pointez sur Ajouter et puis cliquez sur Ajouter un nouvel élément .

      La boîte de dialogue Ajouter un nouvel élément - user_control_scroll_UI s'affiche.
    14. Dans la zone Nom , tapez Vscroll.vb et puis cliquez sur Ouvrir .

      Le fichier est nommé Vscroll.vb apparaît.
    15. Dans l'Explorateur de solutions, cliquez avec le bouton droit sur le formulaire est nommé Vscroll.vb , puis cliquez sur Afficher le code .
    16. Remplacez le code existant par le code suivant :
      ption Strict OnOption 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 SubEnd Class
  3. Générer la solution, puis exécutez le projet. Pour ce faire, procédez comme suit :
    1. Dans Explorateur de solutions, cliquez sur solution 'testusercontrol » (projets 2) .
    2. Dans le menu projet , cliquez sur Propriétés .

      Le solution 'testusercontrol « propriété pages boîte de dialogue s'affiche.
    3. Dans le volet gauche, double-cliquez sur le projet de démarrage sous propriétés communes , puis cliquez sur user_control_scroll_UI .
    4. Dans le volet gauche, double-cliquez sur les dépendances de projet sous propriétés communes .
    5. Dans le volet droit, cliquez sur testusercontrol dans la liste projet et puis cliquez sur OK .
    6. Dans l'Explorateur de solutions, cliquez avec le bouton droit sur user_control_scroll_UI , puis cliquez sur Propriétés .

      Le user_control_scroll_UI propriété pages boîte de dialogue s'affiche.
    7. Dans le volet gauche, double-cliquez sur général sous propriétés communes .
    8. Dans le volet droit, cliquez sur MDI dans la zone objet de démarrage .
    9. Dans le menu Générer , cliquez sur Créer solution .
    10. Appuyez sur F5 pour exécuter le programme.

      Le MDI formulaire s'affiche.
    11. Cliquez sur charger AutoScroll enfant , cliquez sur la flèche vers le bas de défilement pour essayer de déplacer dans l'écran.

      Vous constatez le problème mentionné dans la section « Symptômes ».
Références
Pour plus d'informations sur la création de formulaires enfants MDI, reportez-vous au site de Web MSDN (Microsoft Developer Network) suivant :Pour plus d'informations, cliquez sur le numéro ci-dessous pour afficher l'article correspondant dans la Base de connaissances Microsoft :
824684Description de la terminologie standard utilisée pour décrire les mises à jour logicielles Microsoft

Avertissement : Cet article a été traduit automatiquement.

Propriétés

ID d'article : 839577 - Dernière mise à jour : 01/17/2015 08:49:35 - Révision : 2.2

Microsoft .NET Framework 1.1

  • kbnosurvey kbarchive kbmt kbqfe kbhotfixserver kbmdi kbnetframe110sp1fix kbscrollbar kbcontrol kbforms kbbug kbfix kbnetframe110presp1fix KB839577 KbMtfr
Commentaires