防止 ListView 在按键时显示 Scrolling/Selecting 个项目

Preventing ListView from Scrolling/Selecting Items when Pressing Keys

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

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

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 来测试它是否有效)

'KeyPress' 事件在列表视图更改之前触发(我厌倦了列表框) 诀窍是定义 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' 键。 我希望这就是你的意思。

只需使用 KeyEventArgs

中的 SuppressKeyPress

这应该会导致控件忽略此键。