我正在尝试制作一个WinForm ListBox,您可以使用箭头键循环播放。我还有两个按钮,您可以在其中单击以在列表中上下移动。按钮确实产生了所需的效果。问题是ListBox的keyDown事件永远不会被触发
public MainForm()
{
InitializeComponent();
if (this.clipboardHistoryList.Items.Count > 0)
this.clipboardHistoryList.SetSelected(0, true);
clipboardHistoryList.Select();
}
private void goUpButton_Click(object sender, EventArgs e)
{
goUpList();
}
private void goDownButton_Click(object sender, EventArgs e)
{
goDownList();
}
private void goDownList()
{
if (clipboardHistoryList.SelectedIndex == clipboardHistoryList.Items.Count - 1)
{
clipboardHistoryList.SetSelected(0, true);
}
else
{
clipboardHistoryList.SetSelected(clipboardHistoryList.SelectedIndex + 1, true);
}
}
private void goUpList()
{
if (clipboardHistoryList.SelectedIndex == 0)
{
clipboardHistoryList.SetSelected(clipboardHistoryList.Items.Count - 1, true);
}
else
{
int l_currentlySelected = clipboardHistoryList.SelectedIndex;
clipboardHistoryList.SetSelected(l_currentlySelected - 1, true);
}
}
private void clipboardHistoryList_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Up) //Brekpoint is never reached
{
goUpList();
}
else if (e.KeyCode == Keys.Down)
{
goDownList();
}
}
我已将MainForm的keypreview属性设为true。
箭头键默认在列表框上工作,但是如果按下最后一个元素上的向下箭头,它们将不允许你从最后一个元素到第一个元素 - 希望这是有道理的。
修改
我在Microsoft's documentation看到我需要覆盖ProcessDialogKey
方法,但我不确定我需要做什么。
对控件执行特殊输入或导航处理。例如,您希望使用列表控件中的箭头键来更改所选项。覆盖ProcessDialogKey
是否已有内置方法来启用此行为?
我错过了什么?
谢谢!
答案 0 :(得分:4)
通过查看Designer.cs文件中的代码,看起来您实际上并未将clipboardHistoryList控件连接到clipboardHistoryList_KeyDown事件处理程序中。您可以通过Visual Studio表单设计器的“属性”窗口的“事件”子选项卡(查找小闪电图标)并通过设计器以这种方式连接事件,或者您可以在代码中执行此操作:< / p>
public MainForm()
{
InitializeComponent();
if (this.clipboardHistoryList.Items.Count > 0)
this.clipboardHistoryList.SetSelected(0, true);
clipboardHistoryList.Select();
clipboardHistoryList.KeyDown += clipboardHistoryList_KeyDown;
}