2009-09-03 66 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