【问题标题】:C# Scrolling a Panel in windows formsC# 在 Windows 窗体中滚动面板
【发布时间】:2012-01-27 07:49:27
【问题描述】:

我使用的是 VS2010,Windows 7

我有一个带有很多图片框的面板。它有

AutoScroll = true

当我拖动它或单击它时,滚动条可以正常工作。但是,我想用滚轮和箭头键滚动它。

轮子根本不响应(并且向表单添加事件处理程序不起作用,因为当我改变焦点时它会停止触发),并且要使用箭头键,我必须以编程方式滚动。我尝试了以下方法:

panel3.VerticalScroll.Value = panel3.VerticalScroll.Maximum;

这不起作用,滚动条几乎没有移动。 最大值出于某种原因始终为 100。

我尝试过的车轮问题(不起作用):

// Fires as long as i don't change focus to anything
this.MouseWheel += new MouseEventHandler(Panel1_MouseWheel);

private void Panel1_MouseWheel(object sender, MouseEventArgs e)
{
    panel3.Focus();
}

谢谢。

【问题讨论】:

  • 您必须先将焦点设置在控件上,然后它才能使用鼠标滚轮滚动。尝试先点击它。
  • 不起作用。我点击面板,它是图片框,甚至是文本框。轮子坏了。
  • 使用 TablelayoutPanel ?
  • 试过TableLayoutPanel和FlowLayoutPanel,同样的问题。

标签: c# winforms scroll panel


【解决方案1】:

有几件事可以尝试:

让您的Panel 拥有第一个TabIndex 属性。那就是:

panel1.TabIndex = 0;

显然,表单上的其他控件应该正确地重新索引。

另外,尝试在 MouseDown 事件中添加焦点:

void panel1_MouseDown(object sender, MouseEventArgs e) {
  if (!panel1.Focused)
    panel1.Focus();
}

您也可以使用 MouseEnter,但这可能是一个奇怪的用户界面,因为将鼠标移到面板上会使焦点从当前活动控件上移开。

您不需要订阅 MouseWheel 事件。它应该会自动移动滚动条。

【讨论】:

    【解决方案2】:

    您可以通过分配 AutoScrollPosition 属性来滚动面板。请注意它使用负值。

    鼠标滚轮不起作用的原因是面板和图片框都不是可聚焦的控件。您需要稍微修改面板控件以使其具有焦点。您可以在this answer 中找到代码。

    【讨论】:

      【解决方案3】:

      试试

      private void panel1_MouseEnter(object sender, EventArgs e)    
      {    
         panel1.Focus();    
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-06-25
        • 2020-08-04
        • 2010-11-11
        • 2013-10-31
        • 1970-01-01
        • 1970-01-01
        • 2017-03-13
        • 1970-01-01
        相关资源
        最近更新 更多