当移动控件时,我正在更改窗体上某些标签的可见性。当所有标签都不可见时,我想关闭应用程序。有没有办法做到这一点?
答案 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}}方法来关闭表单和程序。