【问题标题】:Multiple Listboxes, One Selection多个列表框,一个选择
【发布时间】:2014-01-19 22:57:44
【问题描述】:

我的表单上有 2 个列表框,但我只想在两者之间进行一次选择,我该怎么做?

当然,我先尝试过这样做......

Private Sub ListBox1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ListBox1.SelectedIndexChanged
    ListBox2.ClearSelected()
End Sub

Private Sub ListBox2_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ListBox2.SelectedIndexChanged
    ListBox1.ClearSelected()
End Sub

但是由于这会导致所选索引发生更改,因此它也会清除您刚刚选择的内容...

感谢您的帮助!

【问题讨论】:

  • 我认为您可以从 EventArgs 中获取选定的索引。因此,您清除两个列表框,然后将最后一个列表框设置为您在清除两个列表框后从 eventargs 获得的数据。
  • 这将被视为选择更改并创建无限循环。
  • 您可以检查设置的值是否被清除,如果清除了您只需将事件设置为已处理。没有循环。

标签: vb.net windows visual-studio listbox selection


【解决方案1】:

您可以测试原因选择索引更改的原因,如下所示:

private void listBox1_SelectedIndexChanged(object sender, EventArgs e) {
  // If listBox2 focused i.e. user clicked list box2 - do nothing:
  // one should not try to clear list box2 selection
  if (listBox2.Focused)
    return;

  listBox2.ClearSelected();
}

private void listBox2_SelectedIndexChanged(object sender, EventArgs e) {
  // If list box1 is in focus that means that user just have selected itme there;
  // so, do nothing: we shouldn't erase user's selection 
  if (listBox1.Focused)
    return;

  listBox1.ClearSelected();
}

【讨论】:

    【解决方案2】:

    首先,您的问题被标记为 C#,但代码示例在 VB 中。 其次,我会在 C# 中这样做:

    private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
    {
        listBox2.SelectedIndexChanged -= new System.EventHandler(this.listBox2_SelectedIndexChanged);
        listBox2.ClearSelected();
        listBox2.SelectedIndexChanged += new System.EventHandler(this.listBox2_SelectedIndexChanged);
    
    }
    

    并对其他事件处理程序执行相同操作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-26
      • 2023-03-04
      • 2015-07-21
      • 2014-09-26
      • 1970-01-01
      • 2017-01-04
      相关资源
      最近更新 更多