c# - MDIParents Forms 和 Childs 中的事件

标签 c# .net winforms event-handling

如何处理子表单中的 MDIParent 表单事件? 例如,在父表单中,我有一个选项“在子网格上搜索”,当该按钮被点击时,在子表单中,网格上的一行获得焦点。

我正在使用 C# 3.5 Windows 窗体应用程序

提前致谢

最佳答案

我看到了两种不同的方式来解决这个问题。

如果您能想到将命令托管在 MenuStrip 中相反,它是存在于 MDI 应用程序中多个实例中的同一个子窗体,您可以将命令添加到子窗体中的 MenuStrip 控件中。这些菜单命令将自动与父窗体中的命令合并,但任何点击事件都将在事件的子窗体中执行。

您可以通过 MergeAction 控制子表单中的菜单命令在何处以及如何与父表单中的命令合并。和 MergeIndex特性。如果使用这种方法,您可能应该将子窗体中 MenuStripVisible 属性设置为 false 以防止它占用不必要的空间表格。

我建议的第二个选项是创建一个用于定义搜索功能的接口(interface),在支持它的子表单中实现该接口(interface),并使用 MdiChildActivate MDI 父窗体的事件根据当前子窗体是否支持来启用或禁用搜索功能。

第二种方法的简化代码示例:

interface IGridSearch
{
    void PerformSearch(string criteria);
}

public partial class MdiChildUI : Form, IGridSearch
{
    public MdiChildUI()
    {
        InitializeComponent();
    }

    public void PerformSearch(string criteria)
    {
        // peform the search
    }        
}

public partial class MdiParentUI : Form
{
    public MdiParentUI()
    {
        InitializeComponent();
    }

    private void MdiParentUI_MdiChildActivate(object sender, EventArgs e)
    {
        SetControlStates();

    }

    private void SetControlStates()
    {
        _searchCommand.Enabled = (this.ActiveMdiChild is IGridSearch);
    }

    private void _searchCommand_Click(object sender, EventArgs e)
    {
        IGridSearch child = (this.ActiveMdiChild as IGridSearch);
        if (child != null)
        {
            child.PerformSearch("whatever to search for");
        }
        else
        {
            MessageBox.Show("Can't search in the active form");
        }
    }
}

关于c# - MDIParents Forms 和 Childs 中的事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1019542/

相关文章:

c# - 如何调用具有空属性名称的对象属性?

c# - 定义一个像 List<int,string> 这样的列表?

c# - 字节数组的 HashSet

.net - 有没有从Windows窗体中的自定义对话框返回值的标准方法?

c# - 仅在启用 cors 时才响应 asp.net web api POST 请求的 400

c# - "Both use the XML type name X, use XML attributes to specify a unique XML name and/or namespace for the type"怎么解决?

c# - 当我选择路径名时,如何从文本框中的组合框中获取选定的数据库名称

c# - 从 .NET 程序集加载项目设置

c# - DataAnnotation for Password 的正则表达式

c# - WebAPI 路由到具有多个可选参数的函数