2011-06-04 58 views
-1

我已經構建2個自定義控件。控件A和控件B如何知道在哪個表單控件存在

這些控件放置在多於一個的表單中。

讓假設從A型和B型

現在讓我們假設用戶點擊對照A表格A.And調用該控制click事件。

它現在如何確定,控制A位於形態A

所以,我可以改變控制B的形式A的特定屬性

+0

請您向我們提供更多詳細信息,以便我們能夠爲您提供更好的答案... – 2011-06-04 10:48:42

+0

您是否正在研究基於Windows窗體的應用程序?爲什麼和A&B控制所在的窗體以外的地方是否要處理A? – 2011-06-04 10:50:05

回答

0

處理控制A的內部的每個事件表格..

+0

但我必須在他們正在使用的每個地方處理這些事件。 – 2011-06-04 11:01:53

+0

@ Zain:由於您提供的詳細程度,我無法爲您提供更好的解決方案。 – 2011-06-04 11:07:01

1

您可以遞歸使用Control.Parent。如果您沒有嵌套表單,也可以使用Control.TopLevelControl。然後你需要遞歸地走Controls屬性來找到你的第二個控件。

但是,更適當的解決方案是在第一個控件中創建一個屬性,並將其設置爲第二個控件並在事件處理程序中使用它。

+0

但是這些都是自定義控件,所以父控件將被自定義控制它自己而不是它們所在的表單。 – 2011-06-04 11:00:54

+0

即使控件是自定義的,控件的父級也不能成爲控件本身,但無論如何,我已將「遞歸」這個詞用於某個目的。 – wRAR 2011-06-04 11:11:53

0

您使用的是什麼版本的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的答案只是一個選項,如果你的表格不是動態創建的,那麼你可以預先定義所有的動作。儘管如此,我不會這樣。

相關問題