如何一次只显示一个窗体?

时间:2012-02-16 04:55:18

标签: .net windows vb.net winforms combobox

我有一个有3个案例的组合框。 case“0”打开一个对话框,说“不是一个有效的选择” 但是案例“1”和案例“2”在那里打开了独立的形式。 (FormMain和Form3)

如果Form3处于打开状态,我该如何制作呢?FormMain无法打开,并且会出现一个消息框。我不只是想要“.hide”功能。我已经有了那套。

我尝试了一些不同的东西,但都没有效果。我在formload和组合框选择索引

中尝试了它们

有什么建议吗?

3 个答案:

答案 0 :(得分:2)

如果我理解你的问题,听起来模态是解决这个问题的正确方法。

您当前正在使用Form.Show method来显示所选的子表单。将其替换为Form.ShowDialog method。代码看起来相同,但ShowDialog方法将表单显示为模式对话框,这意味着必须先关闭表单,然后用户才能与应用程序中的任何其他表单进行交互。

另外,如果情况“0”确实“不是一个有效的选择”,你应该强烈考虑从组合框中完全删除该选项。

答案 1 :(得分:1)

您可以在模块中公开Form3和FormMain dim语句。在进行测试以查看当前正在运行的内容时,您可以检查表单当前是否正在使用

Public newFrm3 as Form3
Public newFrmMain as FormMain

'blah blah blah
If IsNothing(Form3) then
    'form is closed, create new
    newFrm3 = new Form3
    newFrm3.Show
Else
    'form is currently running, display message etc to alert user.
End If

这假定当用户关闭表单时,将其相应的变量设置为Nothing。

答案 2 :(得分:1)

您可以实现某种静态类,该类将保留当前显示的表单的实例。 确保每个表单在显示之前检查此静态类。

这样的事可能。

    public static classs FormManager
{

    private static Form currentForm=null;
    public static Form CurrentForm
    {
        get
        {
            return currentForm;
        }
        set
        {
            this.currentForm=value;
            if (this.currentForm!=null)
                currentForm.Disposed+=(s,e)=>{FormManager.currentForm=null;};
        }
    }
}

//at each form

.
.
.
public void TryShowForm()
{
    if (FormManager.CurrentForm==null)
        FormManager.CurrentForm=this;
    this.Show();
}