在winforms中检查每个事件

时间:2014-12-13 08:13:30

标签: c# winforms

当移动控件时,我正在更改窗体上某些标签的可见性。当所有标签都不可见时,我想关闭应用程序。有没有办法做到这一点?

2 个答案:

答案 0 :(得分:0)

创建一个这样的函数:

public void CheckLabels()
{
    bool AllHidden = true;
    foreach (Control c in this.Controls)
    {
        if (c.GetType().Name == "Label")
        {
            if (c.Visible == true)
            {
                AllHidden = false;
                Break;
            }
        }
    }
    if (AllHidden)
    {
        //Do whatever you want. For example:
        this.Close();
    }
}

通过所有标签Visibility_Changed事件的按钮点击事件调用此功能。

修改

另一种方法是通过继承System.Windows.Forms.Label来创建自己的标签。

public partial class MyLabel:System.Windows.Forms.Label     {         public MyLabel()         {             的InitializeComponent();             this.VisibleChanged + = new EventHandler(MyLabel_VisibleChanged);         }

    void MyLabel_VisibleChanged(object sender, EventArgs e)
    {
        CheckLabels();
    }

    public void CheckLabels()
    {
        bool AllHidden = true;
        foreach (System.Windows.Forms.Control c in this.FindForm().Controls)
        {
            if (c.GetType().Name == "MyLabel")
            {
                if (c.Visible == true)
                {
                    AllHidden = false;
                    break;
                }
            }
        }
        if (AllHidden)
        {
            //Do whatever you want. For example:
            this.FindForm().Close();
        }
    }

在表单中使用MyLabel。多数民众赞成!!

答案 1 :(得分:0)

您可以跟踪有多少可见的Label控件,当计数达到0时,您可以关闭表单(或执行在您的情况下关闭程序所需的任何其他操作)。 / p>

例如:

partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();

        int visibleLabelCount = 0;

        foreach (Label label in Controls.OfType<Label>())
        {
            // Check property, in case some Label is initialized as not
            // visible in the Designer
            if (label.Visible)
            {
                visibleLabelCount++;
            }

            label.VisibleChanged += (sender, e) =>
            {
                visibleLabelCount += ((Label)sender).Visible ? 1 : -1;

                if (visibleLabelCount <= 0)
                {
                    Close();
                }
            }
        }
    }
}

上面为您Label课程中的每个Form控件添加了一个事件处理程序,同时计算当前可见的Label控件。事件处理程序会调整可见Label控件的数量,作为每个更改的可见性;如果Label变得可见,则计数会增加,如果变得不可见,则会减少。如果计数达到零,则调用Form的{​​{1}}方法来关闭表单和程序。