我已經構建2個自定義控件。控件A和控件B如何知道在哪個表單控件存在
這些控件放置在多於一個的表單中。
讓假設從A型和B型
現在讓我們假設用戶點擊對照A表格A.And調用該控制click事件。
它現在如何確定,控制A位於形態A
所以,我可以改變控制B的形式A的特定屬性
我已經構建2個自定義控件。控件A和控件B如何知道在哪個表單控件存在
這些控件放置在多於一個的表單中。
讓假設從A型和B型
現在讓我們假設用戶點擊對照A表格A.And調用該控制click事件。
它現在如何確定,控制A位於形態A
所以,我可以改變控制B的形式A的特定屬性
處理控制A的內部的每個事件表格..
但我必須在他們正在使用的每個地方處理這些事件。 – 2011-06-04 11:01:53
@ Zain:由於您提供的詳細程度,我無法爲您提供更好的解決方案。 – 2011-06-04 11:07:01
您可以遞歸使用Control.Parent
。如果您沒有嵌套表單,也可以使用Control.TopLevelControl
。然後你需要遞歸地走Controls
屬性來找到你的第二個控件。
但是,更適當的解決方案是在第一個控件中創建一個屬性,並將其設置爲第二個控件並在事件處理程序中使用它。
但是這些都是自定義控件,所以父控件將被自定義控制它自己而不是它們所在的表單。 – 2011-06-04 11:00:54
即使控件是自定義的,控件的父級也不能成爲控件本身,但無論如何,我已將「遞歸」這個詞用於某個目的。 – wRAR 2011-06-04 11:11:53
您使用的是什麼版本的C#?如果您使用的是比較新的版本和正在使用的Windows Presentation Foundation(WPF),你可以做這樣的事情:
private void ControlA_MouseDown(object sender, MouseButtonEventArgs e)
{
((Grid)((ControlA)sender).Parent).Children
// The above line is INCOMPLETE, you need to select the right child, but
// you're at least in the right grid; The rest is up to you (depends on
// the setup of your program);
}
還有另一種「黑客」選項,您可以使用,這是目前爲止最簡單。您可以使用控件的「標記」屬性來存儲您喜歡的任何內容,例如指向ControlB的指針。
ControlA a = new ControlA();
ControlB b = new ControlB();
a.Tag = b;
注意,這是一個黑客,而正確的方法是創建自定義這樣一個字段/變量控制自己。這或多或少是它如何工作的演示。
Akram Shahda的答案只是一個選項,如果你的表格不是動態創建的,那麼你可以預先定義所有的動作。儘管如此,我不會這樣。
請您向我們提供更多詳細信息,以便我們能夠爲您提供更好的答案... – 2011-06-04 10:48:42
您是否正在研究基於Windows窗體的應用程序?爲什麼和A&B控制所在的窗體以外的地方是否要處理A? – 2011-06-04 10:50:05