C#-自动完成文本框在我的应用程序中打开.打开窗体
本文关键字:应用程序 窗体 开窗 我的 文本 C#- | 更新日期: 2023-09-27 18:21:22
基本上,我要做的是在关闭应用程序的主窗体时检查是否有其他窗体打开。
我以为我用这个代码做到了:
private void MainForm_FormClosing(object sender, FormClosingEventArgs e)
{
if (Application.OpenForms.Count > 1)
{
if (!YesNoBox.Show("Title", "Message", this))
{
e.Cancel = true;
}
}
}
YesNoBox
组件只是一个经典的"是/否"形式的问题,.Show()
返回答案。
它运行得很好,直到我在其他表单中添加了一些AutoCompleteTextBox
。。
当我使用AutoCompleteTextBox
时,我会在加载表单时用我的数据填充它。
如果我点击它,它会打开列表,就像我想要的那样,但如果我关闭AutoCompleteTextBox
所在的表单,它仍然会出现在我的Application.OpenForms.Count
中,这里有一个例子。
当然,如果我不干扰任何AutoCompleteTextBox
,计数就会正确。
在这种情况下,我只有打开的MainForm,但我的Application.OpenForms.Count
是3,所以它会在关闭MainForm时弹出。
我看了看我能找到的不同成员,但他们似乎都没有帮助。我不知道为什么AutoCompleteTextBox
没有和他们的父母一起结束。
所以,我正在寻找一种方法来忽略我的测试中的AutoCompleteTextBox
,或者正确地关闭它们,或者其他任何事情,如果你有更好的方法的话!
希望你们能帮助我!
谢谢。
EDIT:AutoCompleteTextBox
实际上是我公司使用的自定义用户控件;您可以在CodeProject上的此处找到代码。。
使用此代码获取计数:
int count = 0;
for (int i = 0; i < Application.OpenForms.Count; i++)
{
if (Application.OpenForms[i].Visible == true)
count++;
}
因此,您可以将代码修改为:
private void MainForm_FormClosing(object sender, FormClosingEventArgs e)
{
int count = 0;
for (int i = 0; i < Application.OpenForms.Count; i++)
{
if (Application.OpenForms[i].Visible == true)
count++;
}
if (count > 1)
{
if (!YesNoBox.Show("Title", "Message", this))
{
e.Cancel = true;
}
}
}