知道哪个ListView关注表单

时间:2012-05-28 00:25:54

标签: c# winforms

C#WinForms:

在某些应用程序中:

enter image description here

我想为“全选”按钮编写代码。 如果我去查看哪个列表视图的“SelectedIndex”或“selected Item”属性大于零,那么它将无法工作,因为如果用户刚刚点击它们的白色区域内该怎么办?

而且form.ActiveControl也不起作用,因为当我们点击“SelectAll”按钮时,为时已晚! ActiveControl就是SelectAll按钮。

也许我可以创建一个类级变量来记住单击了哪个控件等等。但我认为应该有更好的方法....但是什么?!

由于

1 个答案:

答案 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;

    }
}