1

我想处理滑块控件上的箭头键按下事件。我试着用谷歌搜索它,但几乎所有的链接都给了我关于在窗口上处理它的信息(覆盖 WndProc 或 ProcessCmdKey)。 KeyDwon 和 Key Up 事件不会为按箭头而触发。我该如何处理?

4

2 回答 2

0

这里

这是那里的简短引述:

某些键(例如 TAB、RETURN、ESC 和箭头键)由控件自动处理。要让这些键引发 KeyDown 事件,您必须覆盖表单上每个控件中的IsInputKey方法。覆盖IsInputKey的代码需要确定是否按下了某个特殊键并返回 true 值。您可以处理PreviewKeyDown事件并将IsInputKey属性设置为 true ,而不是重写IsInputKey方法。有关代码示例,请参阅PreviewKeyDown事件。

这是来自此处 (PreviewKeyDown)PreviewKeyDown的事件的代码示例:

// By default, KeyDown does not fire for the ARROW keys
void button1_KeyDown(object sender, KeyEventArgs e)
{
    switch (e.KeyCode)
    {
        case Keys.Down:
        case Keys.Up:
            if (button1.ContextMenuStrip != null)
            {
                button1.ContextMenuStrip.Show(button1,
                    new Point(0, button1.Height), ToolStripDropDownDirection.BelowRight);
            }
            break;
    }
}

// PreviewKeyDown is where you preview the key.
// Do not put any logic here, instead use the
// KeyDown event after setting IsInputKey to true.
private void button1_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e)
{
    switch (e.KeyCode)
    {
        case Keys.Down:
        case Keys.Up:
            e.IsInputKey = true;
            break;
    }
}
于 2011-02-25T08:33:57.087 回答
0

当您说滑块控件时,我假设您正在使用轨迹栏控件?如果没有,那么这个答案可能无济于事。

无论如何,您需要为轨迹栏控件设置 OnKeyDown 事件。像下面的代码这样简单的东西将允许用户使用左右箭头从一侧移动到另一侧。

private void trackBar1_KeyDown(object sender, KeyEventArgs e)
        {
            if ((e.KeyCode == Keys.Right) && (trackBar1.Value < trackBar1.Maximum))
                trackBar1.Value += 1;

            if ((e.KeyCode == Keys.Left) && (trackBar1.Value > trackBar1.Maximum))
                trackBar1.Value -= 1;
        }

您只需要检测按键,然后决定它是左箭头还是右箭头,然后从那里做什么。

我已经尝试过了,左右箭头确实为我触发了它。同样,如果您使用不同的滑块控件(没有任何控件称为滑块控件,所以我假设是轨迹栏),那么它可能会有所不同。

于 2011-02-25T08:42:34.727 回答