Jon*_*edo 1 .net c# event-handling winforms
如何处理子项表单中的MDIParent表单事件?例如,在父窗体I中有一个选项"搜索子网格",当单击该按钮时,在子窗体中,网格上的一行会聚焦.
我使用C#3.5 Windows窗体应用程序
提前致谢
我看到两种不同的方式,我会在这个问题之间做出选择.
如果您可以考虑在一个MenuStrip替代方案中托管命令,并且它与MDI应用程序中的多个实例中的子窗体相同,则可以将命令添加到MenuStrip子窗体中的控件.这些菜单命令将自动与父窗体中的命令合并,但任何单击事件都将在活动子窗体中执行.
您可以通过MergeAction和MergeIndex属性控制子窗体中的菜单命令与父窗体中的命令的合并位置和方式.如果使用这种方法,您应该设置子表单中的Visible属性,以防止它占用表单上不必要的空间.MenuStripfalse
我建议的第二个选项是创建一个界面来定义搜索功能,在支持它的子表单中实现该接口,并使用MdiChildActivateMDI父表单的事件根据当前是否启用或禁用搜索功能孩子支持与否.
第二种方法的简化代码示例:
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");
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4542 次 |
| 最近记录: |