获取从不同程序集中执行的打开窗口表单实例的列表

abm*_*bmv 4 c# window instance

我有一个加载菜单的"加载程序应用程序",当用户单击菜单图像按钮时,列表视图将根据文本打开

(if text = employee)  
(Go to class A) 
(Go to class B) 
    ...
    ...
    (Show List View Window) 
Run Code Online (Sandbox Code Playgroud)

如果他再次点击它再次打开的同一个按钮,我想阻止这个.即但是这适用于WPF应用程序

Mar*_*ell 11

如果你想要一个开放表格的清单,那就是Application.OpenForms.您可以使用GetType()并检查.Assembly以查找来自不同程序集的那些来迭代这个.除此之外,我对这个问题并不完全清楚......

        Assembly currentAssembly = Assembly.GetExecutingAssembly();
        List<Form> formsFromOtherAssemblies = new List<Form>();
        foreach (Form form in Application.OpenForms) {
            if (form.GetType().Assembly != currentAssembly) {
                formsFromOtherAssemblies.Add(form);
            }
        }
Run Code Online (Sandbox Code Playgroud)

如果您只想跟踪自己打开的表单,请缓存该实例.或者,如果您使用"拥有的表单",您只需按名称检查:

    private void button1_Click(object sender, EventArgs e) {
        foreach (Form form in OwnedForms) {
            if (form.Name == "Whatever") {
                form.Activate();
                return;
            }
        }
        Form child = new Form();
        child.Name = "Whatever";
        child.Owner = this;
        child.Show(this);
    }
Run Code Online (Sandbox Code Playgroud)