如何处理子表单中的 MDIParent 表单事件? 例如,在父表单中,我有一个选项“在子网格上搜索”,当该按钮被点击时,在子表单中,网格上的一行获得焦点。
我正在使用 C# 3.5 Windows 窗体应用程序
提前致谢
最佳答案
我看到了两种不同的方式来解决这个问题。
如果您能想到将命令托管在 MenuStrip
中相反,它是存在于 MDI 应用程序中多个实例中的同一个子窗体,您可以将命令添加到子窗体中的 MenuStrip
控件中。这些菜单命令将自动与父窗体中的命令合并,但任何点击事件都将在事件的子窗体中执行。
您可以通过 MergeAction
控制子表单中的菜单命令在何处以及如何与父表单中的命令合并。和 MergeIndex
特性。如果使用这种方法,您可能应该将子窗体中 MenuStrip
的 Visible
属性设置为 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/