2009-09-03 72 views
0

我tryed从一个基站Windows窗体创建新的组件,也是我发现的困难时,我用工具条组件的工作,例如:优势控制

如何绑定子窗体上datagrid.datasource使用父级工具栏上按钮(点击)的事件?

我必须在每个子窗体上使用一些片段来做到这一点,顺便说一句,为什么?

// btnSearch 
// 
this.btnSearch.Click += new System.EventHandler(this.btnExec_Click); 

private void btnExec_Click(object sender, EventArgs e) 
{ 
//do stuff 
} 

感谢

编辑:我也知道修饰符问题:

alt text http://i30.tinypic.com/2dchaw2.jpg

我的意思是,我不得不更换一个共同按钮toolstripbutton,还必须添加更多的代码对设计师级别(基本形式):

grpCommonControls.Height = 20; 
dtTScomponent = new ToolStripControlHost(grpCommonControls); 
dtTScomponent.Alignment = ToolStripItemAlignment.Right; 
toolStrip1.Items.Add(dtTScomponent); 


tssbExporta.Alignment = ToolStripItemAlignment.Left; 
toolStrip1.Items.Add(tssbExporta); 

我需要添加一个简单的工具条,在我的基础表单上有一些工具条控件,但是设计者不允许我与这些工具正确地工作(我无法从toolstripbutton将事件路由到我的子表单作为示例)

回答

1

当您创建继承另一个包含不同控件的窗体的窗体时,没有事件处理程序自动为您连接。相反,您需要像您的代码示例那样执行此操作。另一种方法是在您的基本形式中附加该事件处理程序,然后让基本形式公开您可以收听的事件。例如:

在基本形式:

public event EventHandler ExecInvoked; 
private void btnExec_Click(object sender, EventArgs e) 
{ 
    OnExecInvoked(e); 
} 

protected virtual void OnExecInvoked(EventArgs e) 
{ 
    EventHandler evt = ExecInvoked; 
    if (evt != null) 
    { 
     evt(this, e); 
    } 
} 

然后,在你的继承形式,你可以设置一个事件处理程序ExecInvoked事件(你也许可以做到这一点使用的财产的事件列表格),或者你可以重写OnExecInvoked方法:

protected override void OnExecInvoked(EventArgs e) 
{ 
    base.OnExecInvoked(e); 

    // do what the form should do when Exec is invoked 
} 

这种方式,你已经封装的基本形式的内部结构,使孩子形式不知道是什么样的控制引发事件(甚至有可能是几个不同的续导致同一事件被提出),但基本形式仍然提供了一个明确的地方,孩子形式可以对此作出反应。

1

能够更改属性并订阅从您的父窗体(或UserControl)继承的控件的事件,父窗体应将这些控件的Modifiers属性设置为protected(或者,一般来说,可以将任何值设置为为父级控件生成的字段表单对于子表单可见)。 Modifiers的默认值是private

+0

正确,但我注意到设计师有时忽略了这一点。即使在重建之后。 – 2009-09-03 19:03:08