【发布时间】:2013-07-12 13:46:43
【问题描述】:
我知道有很多 Listbox Select 索引更改问题。但是,这个问题关注的是不同的问题。我有一个列表框,表单上有一些字符串。我想要完成的是能够滚动列表框中的项目(即使用箭头键导航到特定项目)。一旦我导航到我想要的项目,我希望能够在项目上按 enter 并继续我的申请。因此,问题是如何确定在列表框中引发的事件类型,以便将事件与鼠标单击事件或 Keydown 事件进行比较,从而允许我根据结果决定执行哪个条件语句布尔表达式的......我需要确定类型的原因是因为如果用户在 selectedIndexed Item 上按下 ENter 会出现一个对话框,当前每次用户突出显示一个新项目时都会出现该对话框(您可以看到是个问题)。
伪代码
if (Listbox_Selected_Event_EventType isEqualTo Mouse_Click)
{
// execute code
} else if (Listbox_Selected_Event_EventType isEqualTo KeydownEvent)
{
// execute code
}
感谢 Evan 完成的代码,
private void listBox1_KeyPress(object sender, KeyPressEventArgs e)
{
if (listBox1.SelectedIndex != -1)
{
if (e.KeyChar == (char)Keys.Return)
{
var file = Directory.GetFiles(urlHistoryFolder, listBox1.Text).FirstOrDefault();
String line;
try
{
using (StreamReader sr = new StreamReader(file))
{
line = sr.ReadToEnd();
}
DialogResult result1 = MessageBox.Show("Are You sure you want to Load this WebService", "Important Question", MessageBoxButtons.YesNo);
if (result1 == DialogResult.Yes)
{
//MessageBox.Show("Loading WebService");
textEndPointUri.Text = line;
listBox1.Visible = false;
GetBtn_Click(sender, e);
}
}
catch (Exception exp)
{
Console.WriteLine("File could not be read:");
Console.WriteLine(exp.Message);
}
}
}
}
【问题讨论】:
-
SelectedIndexChanged在您每次选择ListBox中的项目时触发。我将分别处理MouseClick和KeyUp事件,并为两者添加代码以执行您想要的操作。这些事件的命名相当合乎逻辑,因此确定要处理哪些事件应该没有问题。 -
仍然,您必须确定是否选择了某个项目,每次您单击该表单时都会触发 mouseClick 方法..这违背了目的。你基本上只是重复了我最初的问题。
-
您可以确定是否或在两个事件处理程序中选择了哪个项目。我在下面的答案中添加了一些代码。此外,鼠标单击事件会在表单上的各个控件上触发,而不是每次单击时都会触发每个控件。
listBox1_Click在您单击ListBox时触发,Form1_Click在您单击表单本身时触发等...只需处理单个控件的单击即可。
标签: c# .net listbox comparison selectedindexchanged