在表单中,我有一个 Panel
,其中包含一个PictureBox
,而没有其他内容。一个要求之一是,用户应该仅使用键盘就可以滚动浏览该面板的内容。换句话说,他们首先需要在面板中标记,然后使用上/下/down/pageup/pageown键进行滚动。
根据Microsoft文档,
TabStop属性对面板控件没有影响,因为它是一个 容器对象。
,在尝试之后,它似乎是非常真实的。在查找图片框的塔巴斯普属性时,它只是说
此属性与此类无关。
我尝试在面板中添加VScrollBar
并将其TabStop
设置为True
,但这似乎没有做任何事情。
实现所需效果的最佳方法是什么?
您可以从Panel
派生并制作Selectable
并将其TabStop
设置为true。然后,足以覆盖ProcessCmdKey
并处理箭头键进行滚动。不要忘记将其AutoScroll
设置为true。
可选面板 - 键盘可滚动
using System.Drawing;
using System.Windows.Forms;
class SelectablePanel : Panel
{
const int ScrollSmallChange = 10;
public SelectablePanel()
{
SetStyle(ControlStyles.Selectable, true);
SetStyle(ControlStyles.UserMouse, true);
TabStop = true;
}
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
if (!Focused)
return base.ProcessCmdKey(ref msg, keyData);
var p = AutoScrollPosition;
switch (keyData)
{
case Keys.Left:
AutoScrollPosition = new Point(-ScrollSmallChange - p.X, -p.Y);
return true;
case Keys.Right:
AutoScrollPosition = new Point(ScrollSmallChange - p.X, -p.Y);
return true;
case Keys.Up:
AutoScrollPosition = new Point(-p.X, -ScrollSmallChange - p.Y);
return true;
case Keys.Down:
AutoScrollPosition = new Point(-p.X, ScrollSmallChange - p.Y);
return true;
default:
return base.ProcessCmdKey(ref msg, keyData);
}
}
}