鼠标滚轮在面板中滚动,动态添加了图片框控件?

mik*_*jik 5 vb.net scroll panel picturebox winforms

我动态地将20个图片框添加到面板中,并希望在使用鼠标滚轮时看到面板滚动.为了实现这一点,我尝试在面板控件上将autoscroll设置为true.这是代码.对于i As Integer = 1到20:

        Dim b As New PictureBox()
        b.Image = Nothing
        b.BorderStyle = BorderStyle.FixedSingle
        b.Text = i.ToString()
        b.Size = New Size(60, 40)
        b.Location = New Point(0, (i * b.Height) - b.Height)
        b.Parent = Panel1
        Panel1.Controls.Add(b)
    Next
Run Code Online (Sandbox Code Playgroud)

我用按钮控制做了同样的事情,它工作得很好.对于i As Integer = 1到100:

        Dim b As New Button()

        b.Text = i.ToString()
        b.Size = New Size(60, 40)
        b.Location = New Point(0, (i * b.Height) - b.Height)
        b.Parent = Panel1
        Panel1.Controls.Add(b)
    Next
Run Code Online (Sandbox Code Playgroud)

它适用于"按钮"控制,但不适用于"图片框"或"标签"控件?如何使用"鼠标滚轮"实现滚动效果?

cwi*_*ick 6

当面板或其中的控件具有焦点时,面板将使用鼠标滚轮滚动.您遇到的问题是,当您单击它时,PictureBox和面板都不会获得焦点.如果您select()在面板上调用,您将看到鼠标滚轮再次开始工作.

一种可能的解决方案是通过处理Control.MouseEnter事件,在鼠标光标进入时选择面板:

void panel1_MouseEnter(object sender, EventArgs e)
{
    panel1.select();
}
Run Code Online (Sandbox Code Playgroud)