使用键盘(向下/向上翻页)带有图像的滚动面板
本文关键字:图像 滚动 键盘 向下 | 更新日期: 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
,例如Buttons
,ListBoxes
等,这是另一种解决方案,无论如何都有效,我相信..:
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
。不过我无法让它工作..(最后似乎也不再简单了。