使用键盘(向下/向上翻页)带有图像的滚动面板

本文关键字:图像 滚动 键盘 向下 | 更新日期: 2023-09-27 18:33:28

在支持滚动条和键盘滚动的Winforms应用程序中显示大图像的正确方法是什么?目前我正在使用带有嵌套PitureBox(SizeMod = AutoSize(的Panel(AutoScroll=True(。

我有两个问题:

1(绘制图像选择什么控件?面板和 PitureBox 无法使用 Tab 键选择(聚焦(。使用带有自动大小 = true 和平面样式 = 平面的按钮是正确的解决方案吗?

2(如何使用键盘在面板中滚动图像。需要处理哪些键盘事件 - 窗体、面板或图片框。也许我应该为面板自动滚动=false设置并向它们添加HScroll和VScroll,我应该处理的事件?

实现此基本应用程序的正确方法是什么?

(

仅供参考,主窗体具有其他包含一些控件的面板(停靠=顶部(。

使用键盘(向下/向上翻页)带有图像的滚动面板

  • 至于第一个问题:没有一个控件非常适合绘制并且仍然可以获得Focus。不过,在下面的链接中,您可以看到如何制作可选面板

  • 现在真正的问题:如何通过键盘滚动AutoScroll Panel..?

这是非常困难的。下面是一个开始示例:

private void Form1_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e)
{
  if (panel1.Bounds.Contains( this.PointToClient( Cursor.Position )  ))
  {
    if (e.KeyValue == 33) panel1.AutoScrollPosition = 
      new Point(panel1.AutoScrollPosition.X, Math.Abs(panel1.AutoScrollPosition.Y) - 10);
    if (e.KeyValue == 34) panel1.AutoScrollPosition = 
      new Point(panel1.AutoScrollPosition.X, Math.Abs(panel1.AutoScrollPosition.Y) + 10);
  }
}

我测试包含鼠标的Panel。您可能想玩弄滚动量。还要用适当的Keys替换KeyValues;-( 为表单设置KeyPreview = true;

注意:仅当窗体上没有可以获取焦点的控件时,这才有效。

由于您很可能有一些这样的Controls,例如ButtonsListBoxes等,这是另一种解决方案,无论如何都有效,我相信..:

protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
    if (panel1.Bounds.Contains(this.PointToClient(Cursor.Position)))
    switch (keyData)
    {
        case Keys.PageDown: { scroll(10);  return true; }
        case Keys.PageUp:   { scroll(-10); return true; }
       // maybe code for some more keys..?
    }
    return base.ProcessCmdKey(ref msg, keyData);
}
void scroll(int delta)
{
    panel1.AutoScrollPosition =  new Point(
           panel1.AutoScrollPosition.X, Math.Abs(panel1.AutoScrollPosition.Y) + delta);
}

这不需要表单具有KeyPreview = true;

以下是 MSDN 对 AutoScrollPosition 的解释。

这里有一篇文章建议对Panel和/或PictureBox使用子类,这应该允许他们获得Focus。不过我无法让它工作..(最后似乎也不再简单了。