2013-07-12 33 views
1

我知道有Listbox选择索引更改问题浮动。但是,这个问题关注的是另一个问题。我有一个列表框,在表单上有一些字符串。我试图完成的是能够滚动列表框中的项目(,即使用箭头键导航到特定项目)。一旦我导航到我想要的物品,我想要能够按下物品上的输入并继续我的应用程序。所以,问题是如何确定在列表框中引发的事件类型,以便将该事件与Mouse Click事件或Keydown事件进行比较,从而允许我根据结果决定要执行的条件语句布尔表达式的原因......我需要确定类型的原因是因为如果用户按下selectedIndexed Item上的ENter对话框出现,那么每当用户突出显示一个新项目时,就会出现对话框(您可以看到如何是个问题)。确定在列表框,选定索引更改中引发的事件类型。 C#

的伪代码

if (Listbox_Selected_Event_EventType isEqualTo Mouse_Click) 
    { 
     // execute code 
    } else if (Listbox_Selected_Event_EventType isEqualTo KeydownEvent) 
      { 
      // execute code 
      } 

完成的代码感谢埃文,

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); 
       } 
      } 
     } 
    } 
+1

'SelectedIndexChanged'每次在ListBox中选择一个项目时触发。我只是单独处理'MouseClick'和'KeyUp'事件并向两者添加代码以执行所需操作。事件的命名是相当逻辑的,因此找出你想处理的事情应该没有问题。 –

+0

仍然,你必须确定是否选择了一个项目,鼠标点击方法触发每次你点击该形式..这就击败了目的。你基本上只是回答了我原来的问题。 – KING

+0

您可以确定是否在两个事件处理程序中选择或选择哪个项目。我在下面的答案中添加了一些代码。此外,鼠标点击事件触发表单上的单个控件,而不是每次单击时控制每个控件。 'ListBox1_Click'在你点击'ListBox'时触发,'Form1_Click'在你点击表格本身时触发......只需处理单个控件的点击。 –

回答

1

问题是你正在寻找在错误的事件。您应该在列表框上处理MouseClick事件和KeyUpKeyDown事件。

private void listBox1_KeyUp(object sender, KeyEventArgs e) 
    { 
     if (e.KeyCode == Keys.Enter) 
     { 
      //Get the selected item and do whatever you need to it 
      //Open your dialog box 

     } 
    } 

    private void listBox1_Click(object sender, MouseEventArgs e) 
    { 
     //Get the selected item and do whatever you need to it 
     //Open your dialog box 
    } 

然后,不需要有条件,因为您已分别处理两个事件。确保从SelectedIndexChanged事件中删除对话框代码。

编辑: SelectedIndexChanged每当您在ListBox对象中选择和项目时触发。即使您不处理该事件,该框仍会存储索引。所以你可以在任何地方引用或操纵SelectedIndex的PROPERTY。如果您处理上述两个事件,任何时候用户点击一个项目或按下回车你检查是否是有选择的项目:

if (listBox1.SelectedIndex != -1) 
{ 
    //Now we know you have an item selected 
    //Do some stuff 
} 
+0

它不是重点对话框。每次发生这些操作时,这些方法都会再次启动如果我要实现这一点,并且相信我,在发布之前我已经尝试过了,没有什么会改变。我需要一种方式来告诉如果一个ITEM被选择。这就是为什么我首先选择了Selected Index Changed。 – KING

+0

没有必要粗鲁或吼叫,因为你的外壳暗示。只要加上'if(listBox1.SelectedIndex!= -1){//我们知道某件事情被选中了}'这会告诉你如果一个ITEM被选择 –

+0

不,我不是无礼的意思,我的朋友特别是当我是一个接受者帮帮我。我大写这句话只是为了表明这是不重要的。 – KING

0

要确定是否ENTER键被按下:

private void listBox1_KeyPress(object sender, KeyPressEventArgs e) 
{ 
    if (e.KeyChar == (char)Keys.Return) 
     // do something 
} 
1

添加一个按钮添加到窗体并设置窗体的AcceptButton()属性到那个按钮。现在当按下Enter键时,按钮将被触发。在Button Click()处理程序中显示对话框。这还带来了额外的好处,人们也可以点击Button而不是按Enter键:

private void button1_Click(object sender, EventArgs e) 
    { 
     if (ListBox.SelectedIndex != -1) 
     { 
      // ... display the dialog ... 
      Console.WriteLine(ListBox.SelectedItem.ToString()); 
     } 
    } 
+0

虽然我的标记是答案,这是OP的有用信息,并最终回答'SelectedIndex'问题。 +1 –

相关问题