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上的此处找到代码。。

C#-自动完成文本框在我的应用程序中打开.打开窗体

使用此代码获取计数:

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