0

C# WinForms:

在这样的一些应用程序中:

在此处输入图像描述

我想为“全选”按钮编写代码。如果我去检查哪个列表视图的“SelectedIndex”或“selected Item”属性大于零,那么它将不起作用,因为如果用户只是在它们的白色区域内单击了怎么办?

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

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

谢谢

4

1 回答 1

2

您可以将“GotFocus”事件分配给这样的方法,并以这种方式记录“最后聚焦”控件。然后在您的 SelectAll_CLick 处理程序中,如果分配了列表视图,则选择全部,否则 - 不要!

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;

    }
}
于 2012-05-28T00:44:33.683 回答