gpt4 book ai didi

c# - MDIParents Forms 和 Childs 中的事件

转载 作者:太空宇宙 更新时间:2023-11-03 18:49:56 25 4
gpt4 key购买 nike

如何处理子表单中的 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com