在计时器为 运行 时滚动浏览用户控件
Scroll through a user control while timer is running
每当我单击用户控件区域时,它都会突出显示组合框,这样如果我试图滚动到屏幕底部,它只会滚动组合框。
我尝试将 somelabel.focus()
放入用户控件的点击事件中。这种作品。但是,这不允许我滚动到 somelabel
不可见的控件部分,这对我来说似乎有点奇怪。我显然需要能够一直滚动到用户控件的底部。
附加信息:这是一个 winforms 项目,用户控件是定时器上的 运行,其中唯一的控件是 combobox
和一些 labels
,它们具有 .text
属性 每次定时器循环时更新。
更新:我尝试禁用计时器,似乎在将焦点更改为其中一个标签后,我现在可以一直滚动到页面底部。所以这似乎是计时器的问题。
这是一些重现该问题的代码。如果您单击面板,它会获得焦点,但不会让您使用滚轮滚动。 它会将面板顶部带回屏幕顶部。但是,如果您不打开计时器,则可以自由滚动。
Public i As Integer
Public iString As String
Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
iString = i.ToString()
Label1.Text = iString
Label2.Text = iString
Label3.Text = iString
Label4.Text = iString
Label5.Text = iString
i += 1
End Sub
Private Sub UserControl1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Timer1.Start()
End Sub
Private Sub Panel1_Click1(sender As Object, e As EventArgs) Handles Panel1.Click
Panel1.Focus()
End Sub
您可以添加带有 Dock=Fill
和 AutoScroll=true
的 Panel
,您可以在其中插入控件。然后为面板添加点击事件:
private void panel1_Click(object sender, EventArgs e)
{
this.ActiveControl = panel1;
}
这样,如果您在面板内部单击(填满整个 UserControl
),面板将处于活动状态并且您可以滚动。这不会影响面板内的控件,因此您可以按常规方式使用它们。
每当我单击用户控件区域时,它都会突出显示组合框,这样如果我试图滚动到屏幕底部,它只会滚动组合框。
我尝试将 somelabel.focus()
放入用户控件的点击事件中。这种作品。但是,这不允许我滚动到 somelabel
不可见的控件部分,这对我来说似乎有点奇怪。我显然需要能够一直滚动到用户控件的底部。
附加信息:这是一个 winforms 项目,用户控件是定时器上的 运行,其中唯一的控件是 combobox
和一些 labels
,它们具有 .text
属性 每次定时器循环时更新。
更新:我尝试禁用计时器,似乎在将焦点更改为其中一个标签后,我现在可以一直滚动到页面底部。所以这似乎是计时器的问题。
这是一些重现该问题的代码。如果您单击面板,它会获得焦点,但不会让您使用滚轮滚动。 它会将面板顶部带回屏幕顶部。但是,如果您不打开计时器,则可以自由滚动。
Public i As Integer
Public iString As String
Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
iString = i.ToString()
Label1.Text = iString
Label2.Text = iString
Label3.Text = iString
Label4.Text = iString
Label5.Text = iString
i += 1
End Sub
Private Sub UserControl1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Timer1.Start()
End Sub
Private Sub Panel1_Click1(sender As Object, e As EventArgs) Handles Panel1.Click
Panel1.Focus()
End Sub
您可以添加带有 Dock=Fill
和 AutoScroll=true
的 Panel
,您可以在其中插入控件。然后为面板添加点击事件:
private void panel1_Click(object sender, EventArgs e)
{
this.ActiveControl = panel1;
}
这样,如果您在面板内部单击(填满整个 UserControl
),面板将处于活动状态并且您可以滚动。这不会影响面板内的控件,因此您可以按常规方式使用它们。