对于选择模式设置为单选的列表框(ListBox),我希望跟踪是否有选定的项目或没有选定的项目。为此,我订阅了一个方法到SelectedIndexChanged事件,并检查SelectedIndex是否为-1。但是,我注意到即使SelectedIndex变为-1(如果它不是-1),事件也不会在调用Items.Clear()后触发。
为什么事件不会触发? 我知道我可以通过在清除列表之前将-1分配给SelectedIndex来解决这个问题。但是是否有更好的方法?
以下是一个简单的代码以复制此问题:
为什么事件不会触发? 我知道我可以通过在清除列表之前将-1分配给SelectedIndex来解决这个问题。但是是否有更好的方法?
以下是一个简单的代码以复制此问题:
using System;
using System.Windows.Forms;
namespace ns
{
class Program
{
static ListBox lst = new ListBox();
public static void Main()
{
lst.SelectedIndexChanged += new EventHandler(lst_SelectedIndexChanged);
lst.Items.Add(1);
Console.WriteLine("Setting selected index to 0...");
lst.SelectedIndex = 0; //event fire here
Console.WriteLine("(Selected Index == {0})", lst.SelectedIndex);
Console.WriteLine("Clearing all items...");
lst.Items.Clear(); //event *should* fire here?!
//proof that the selected index has changed
Console.WriteLine("(Selected Index == {0})", lst.SelectedIndex);
}
static void lst_SelectedIndexChanged(object sender, EventArgs e)
{
Console.WriteLine("[!] Selected Index Changed:{0}", lst.SelectedIndex);
}
}
}
编辑: 我正在考虑通过创建一个继承自ListBox的类或创建一个用户控件来制作自定义列表。然而,我不确定如何处理这个问题。 有没有关于使用继承/用户控件隐藏/覆盖clear方法的想法? 这是否需要隐藏/覆盖其他方法,还是有一种避免这种情况的方法?