4

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

(if text = employee)  
(Go to class A) 
(Go to class B) 
    ...
    ...
    (Show List View Window) 

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

4

5 回答 5

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

如果您只想跟踪自己打开的表单,请缓存该实例。或者,如果您使用“拥有的表格”,您可以按名称检查:

    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);
    }
于 2008-12-23T13:33:11.393 回答
2
    NewProduct newproduct;
    private void button1_Click(object sender, EventArgs e)
    {

        if(!isOpened())
        {
            newproduct = new NewProduct();
            newproduct.Show();
        }

    }
    private bool isOpened()
    {
        foreach (Form f in Application.OpenForms)
        {
            if (f == newproduct)
            {
                return true;
            }
        }
        return false;
    }
于 2009-03-25T12:23:53.440 回答
2

另一个简单的例子

private Boolean FindForm(String formName)
    {
        foreach (Form f in Application.OpenForms)
        {
            if (f.Name.Equals(formName))
            {

                f.Location = new Point(POINT.X, POINT.Y + 22);
                return true;
            }
        }

        return false;
    }
于 2014-04-30T06:53:46.357 回答
0

您可以使用命令模式。加载程序集将在加载的程序集中搜索命令。对于每个命令,加载程序都会创建菜单项(或您想要的任何其他内容),并且单击事件将运行具体命令。

该命令必须知道是否应该创建新表单或使用一些已经存在的表单。

于 2008-12-23T14:51:16.527 回答
0

Mark Garvell 的回答帮助我弄清楚我应该做什么,但它需要针对 WPF 进行调整。

(就我而言,我想在主窗口关闭时关闭任何不属于主窗口的窗口,但原理是一样的。)

private void EmployeeMenuItemClick(object sender, RoutedEventArgs e)
{
    bool found = false;
    foreach(Window w in Application.Current.Windows)
    {
        if(w.GetType() == typeof(EmployeeListViewWindow)
        {
            found = true;
            break;
        }
    }
    if(!found)
    {
        EmployeeListViewWindow ew = new EmployeeListViewWindow();
        ew.Show();
    }
}
于 2010-08-02T09:27:15.193 回答