在 winform 中检查每个事件

本文关键字:事件 检查 winform | 更新日期: 2023-09-27 18:34:05

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

在 winform 中检查每个事件

您可以跟踪有多少个可见的Label控件,当计数达到 0 时,您可以关闭窗体(或执行关闭程序所需的任何其他操作)。

例如:

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();
                }
            }
        }
    }
}

上面将一个事件处理程序附加到在 Form 类中找到的每个 Label 控件,同时计算当前可见的 Label 控件。事件处理程序随着每个控件的可见性更改而调整可见Label控件的计数;如果Label变得可见,则计数增加,如果它变得不可见,则计数减少。如果计数达到零,则调用FormClose()方法来关闭窗体和程序。

创建一个这样的函数:

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 { 公共我的标签() { 初始化组件(); 这。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。就是这样!!