C# - AutoCompleteTextBox在我的Application.OpenForms中打开

时间:2015-11-10 09:13:18

标签: c#

基本上我要做的是检查在关闭我的应用程序的主窗体时是否打开其他窗体。

我以为我是用这段代码制作的:

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.Counthere's an example.

当然,如果我不干涉任何AutoCompleteTextBox,那么计数就会正确。

在这种情况下,我只有我的MainForm是打开的,但我的Application.OpenForms.Count是3,所以它在关闭MainForm时弹出窗口。

我看了一下我能找到的不同成员,但没有一个看起来有帮助。 我不知道为什么AutoCompleteTextBox没有与他们的父母关闭。

所以,我正在寻找一种方法来忽略测试中的AutoCompleteTextBox,或正确地关闭它们,或者其他任何事情,如果你有更好的方法做到这一点!

希望你能帮助我们!

感谢。

编辑: AutoCompleteTextBox实际上是我公司使用的自定义用户控件;你可以找到代码here on CodeProject.

1 个答案:

答案 0 :(得分:1)

使用此代码获取计数:

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