按键时防止ListView滚动/选择项目

时间:2017-07-11 13:29:56

标签: windows winforms listview c++-cli override

我试图阻止我的ListView自动向下滚动/选择带有我按下的第一个字母的项目。

所以我试图覆盖它,但这对我不起作用。

public ref class ExtendedListView : public System::Windows::Forms::ListView
{
public:
    ExtendedListView();

    virtual void KeyPress(KeyEventArgs e) override
    {
        if (e.KeyCode == Keys::W || e.KeyCode == Keys::A || e.KeyCode == Keys::S || e.KeyCode == Keys::D)
        {
            MessageBox::Show("Test");
            return;
        }           
    }

};

(我添加MessageBox来测试它是否有效)

2 个答案:

答案 0 :(得分:3)

' KeyPress' listview中的更改之前触发事件(我用列表框累了) 诀窍是定义2个变量:

int selectedindex=0;
bool goBack=false;

private void listBox1_KeyDown(object sender, KeyEventArgs e)
{
    if (e.KeyCode==Keys.B)
    {
        selectedindex = listBox1.SelectedIndex;
        goBack = true;
    }
}

private void listBox1_SelectedIndexChanged_1(object sender, EventArgs e)
{
    if (goBack)
    {
        listBox1.SelectedIndex = selectedindex;
        goBack = false;
    }
}

此示例可防止' B'关键的例子。 我希望这就是你的意思。

答案 1 :(得分:1)

只需使用KeyEventArgs

中的SuppressKeyPress即可

这会导致控件忽略此键。