Quando un controllo utente è presente in un form figlio MDI (Multiple Document Interface), è Impossibile scorrere verso il basso. Questo problema si verifica quando il controllo utente contiene lo stato attivo. Si tenta di scorrere verso il basso utilizzando la freccia di scorrimento-down nella barra di scorrimento di form figlio, ma non possono scorrere verso il basso.
Quando un controllo utente contiene lo stato attivo, il controllo utente è un controllo attivo. Tuttavia, quando il controllo utente contiene lo stato attivo, la proprietà ActiveControl.Focused presente in Microsoft .NET Framework 1.1 Restituisce false invece di restituire true. Pertanto, con particolare attenzione al controllo utente forza il modulo per rendere visibile il controllo di utente. Questo problema si verifica quando si esegue un'operazione di scorrimento-down facendo clic sulla freccia down di scorrimento.
Per risolvere questo problema, è possibile ottenere il service pack più recenti per Microsoft .NET Framework 1.1. Il seguente file è disponibile per il download dall'Area download Microsoft:
Microsoft ha confermato che questo è un problema nei prodotti Microsoft elencati nella sezione "articolo si applicano a". Questo problema è stato corretto prima in Microsoft .NET Framework 1.1 Service Pack 1.
Creare un file di controllo utente. A tale scopo, attenersi alla seguente procedura:
Avviare Microsoft Visual Studio .NET.
Scegliere nuovo dal menu File , quindi progetto .
Verrà visualizzata la finestra di dialogo Nuovo progetto .
In tipi di progetto , fare clic su progetti di Visual Basic .
Fare clic su in modelli Windows libreria di controlli .
Nella casella Nome digitare testusercontrol e quindi fare clic su OK .
Per impostazione predefinita, viene visualizzato il file è denominato Usercontrol1.vb.
Aggiungere un controllo casella di testo il Usercontrol1.vb [Progettazione] file.
Scegliere dal menu Genera Genera soluzione .
Aggiungere un'applicazione Windows per il progetto. A tale scopo, attenersi alla seguente procedura:
Scegliere dal menu File , Aggiungi progetto , quindi scegliere Nuovo progetto .
Verrà visualizzata la finestra di dialogo Nuovo progetto .
In tipi di progetto , fare clic su progetti di Visual Basic .
Fare clic su in modelli Windows Application .
Nella casella Nome digitare user_control_scroll_UI e quindi fare clic su OK .
Per impostazione predefinita, viene visualizzato il modulo viene denominato Form1.
In Esplora soluzioni, fare clic con il pulsante destro del mouse su user_control_scroll_UI e quindi fare clic su Aggiungi riferimento .
Verrà visualizzata la finestra di dialogo Aggiungi riferimento .
Fare clic sulla scheda progetti , fare clic su Seleziona , quindi OK per aggiungere il testusercontrol il riferimento al progetto.
Fare clic con il pulsante destro sulla maschera che viene denominata Form1 e quindi fare clic su Visualizzazione codice .
Sostituire il codice esistente con il codice riportato di seguito:
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
In Esplora soluzioni, fare clic con il pulsante destro del mouse su user_control_scroll_UI , scegliere Aggiungi e quindi fare clic su Aggiungi nuovo elemento .
Verrà visualizzata la finestra di dialogo Aggiungi nuovo elemento - user_control_scroll_UI .
Nella casella Nome digitare mdi.vb e quindi fare clic su Apri .
Il file è denominato mdi.vb verrà visualizzato.
In Esplora soluzioni, fare clic con il pulsante destro sulla maschera che viene denominata mdi.vb e quindi scegliere Visualizza codice .
Sostituire il codice esistente con il codice riportato di seguito:
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
In Esplora soluzioni, fare clic con il pulsante destro del mouse su user_control_scroll_UI , scegliere Aggiungi e quindi fare clic su Aggiungi nuovo elemento .
Verrà visualizzata la finestra di dialogo Aggiungi nuovo elemento - user_control_scroll_UI .
Nella casella Nome digitare vscroll.vb e quindi fare clic su Apri .
Il file è denominato vscroll.vb verrà visualizzato.
In Esplora soluzioni, fare clic con il pulsante destro sulla maschera che viene denominata vscroll.vb e quindi scegliere Visualizza codice .
Sostituire il codice esistente con il codice riportato di seguito: ption
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
Generare la soluzione ed eseguire il progetto. A tale scopo, attenersi alla seguente procedura:
In Esplora soluzioni, fare clic su soluzione testusercontrol (progetti 2) .
Scegliere proprietà dal menu progetto .
Il soluzioni testusercontrol proprietà pagine verrà visualizzata la finestra di dialogo.
Nel riquadro sinistro, fare doppio clic sul progetto di avvio in proprietà comuni e quindi fare clic su user_control_scroll_UI .
Nel riquadro sinistro, fare doppio clic su dipendenze del progetto in proprietà comuni .
Nel riquadro destro, fare clic su testusercontrol nell'elenco di Project e quindi fare clic su OK .
In Esplora soluzioni, fare clic con il pulsante destro del mouse su user_control_scroll_UI e quindi scegliere Proprietà .
Il user_control_scroll_UI proprietà pagine verrà visualizzata la finestra di dialogo.
Nel riquadro sinistro fare doppio clic su generale in proprietà comuni .
Nel riquadro destro, fare clic su MDI nella casella oggetto di avvio .
Scegliere dal menu Genera Genera soluzione .
Premere F5 per eseguire il programma.
MDI verrà visualizzato il form.
Fare clic su Carica AutoScroll figlio , selezionare la freccia di scorrimento-down per spostarsi nel modulo.
Si noterà il comportamento menzionato nella sezione "Sintomi".
Il presente articolo è stato tradotto tramite il software di traduzione automatica di Microsoft e non da una persona. Microsoft offre sia articoli tradotti da persone fisiche sia articoli tradotti automaticamente da un software, in modo da rendere disponibili tutti gli articoli presenti nella nostra Knowledge Base nella lingua madre dell?utente. Tuttavia, un articolo tradotto in modo automatico non è sempre perfetto. Potrebbe contenere errori di sintassi, di grammatica o di utilizzo dei vocaboli, più o meno allo stesso modo di come una persona straniera potrebbe commettere degli errori parlando una lingua che non è la sua. Microsoft non è responsabile di alcuna imprecisione, errore o danno cagionato da qualsiasi traduzione non corretta dei contenuti o dell?utilizzo degli stessi fatto dai propri clienti. Microsoft, inoltre, aggiorna frequentemente il software di traduzione automatica. Nel caso in cui si riscontrino degli errori e si desideri inviare dei suggerimenti, è possibile completare il questionario riportato alla fine del presente articolo.
Clicca qui per visualizzare la versione originale in inglese dell?articolo: 839577
(http://support.microsoft.com/kb/839577/en-us/
)
LE INFORMAZIONI CONTENUTE NELLA MICROSOFT KNOWLEDGE BASE SONO FORNITE SENZA GARANZIA DI ALCUN TIPO, IMPLICITA OD ESPLICITA, COMPRESA QUELLA RIGUARDO ALLA COMMERCIALIZZAZIONE E/O COMPATIBILITA' IN IMPIEGHI PARTICOLARI. L'UTENTE SI ASSUME L'INTERA RESPONSABILITA' PER L'UTILIZZO DI QUESTE INFORMAZIONI. IN NESSUN CASO MICROSOFT CORPORATION E I SUOI FORNITORI SI RENDONO RESPONSABILI PER DANNI DIRETTI, INDIRETTI O ACCIDENTALI CHE POSSANO PROVOCARE PERDITA DI DENARO O DI DATI, ANCHE SE MICROSOFT O I SUOI FORNITORI FOSSERO STATI AVVISATI. IL DOCUMENTO PUO' ESSERE COPIATO E DISTRIBUITO ALLE SEGUENTI CONDIZIONI: 1) IL TESTO DEVE ESSERE COPIATO INTEGRALMENTE E TUTTE LE PAGINE DEVONO ESSERE INCLUSE. 2) I PROGRAMMI SE PRESENTI, DEVONO ESSERE COPIATI SENZA MODIFICHE, 3) IL DOCUMENTO DEVE ESSERE DISTRIBUITO INTERAMENTE IN OGNI SUA PARTE. 4) IL DOCUMENTO NON PUO' ESSERE DISTRIBUITO A SCOPO DI LUCRO.
Grazie. I commenti e suggerimenti forniti verranno utilizzati per migliorare la qualità dei contenuti di supporto tecnico. Per ulteriori opzioni di assistenza, visitare la home page del Supporto Tecnico Microsoft.