在 winform 中检查每个事件
本文关键字:事件 检查 winform | 更新日期: 2023-09-27 18:34:05
当移动控制时,我正在更改表单上某些标签的可见性。当所有标签都不可见时,我想关闭应用程序。有没有办法做到这一点?
您可以跟踪有多少个可见的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
变得可见,则计数增加,如果它变得不可见,则计数减少。如果计数达到零,则调用Form
的Close()
方法来关闭窗体和程序。
创建一个这样的函数:
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
。就是这样!!