C#WinForms:
在某些应用程序中:
我想为“全选”按钮编写代码。 如果我去查看哪个列表视图的“SelectedIndex”或“selected Item”属性大于零,那么它将无法工作,因为如果用户刚刚点击它们的白色区域内该怎么办?
而且form.ActiveControl也不起作用,因为当我们点击“SelectAll”按钮时,为时已晚! ActiveControl就是SelectAll按钮。
也许我可以创建一个类级变量来记住单击了哪个控件等等。但我认为应该有更好的方法....但是什么?!
由于
答案 0 :(得分:2)
你可以将'GotFocus'事件分配给这样的方法,并以这种方式记录'last focused'控件。然后在SelectAll_CLick处理程序中,如果分配了listview,则selectall,否则 - 不要!
private ListView mLastSelectedListView;
private void ListViews_GotFocus(object sender, EventArgs e)'
{
ListView lv = sender as ListView;
if (null == lv) return;
mLastSelectedListView = lv;
}
private void SelectAll_Click(object sender, EventArgs e)
{
if (null == mLastSelectedListView) return;
mLastSelectedListView.SelectAll();
}
这是一个快速的'SelectAll'扩展方法来支持上述内容;
public static class ListViewExtensions
{
public static void SelectAll(this ListView lv)
{
foreach (ListViewItem item in lv.Items)
item.Selected = true;
}
}