2011-06-04 55 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的答案只是一个选项,如果你的表格不是动态创建的,那么你可以预先定义所有的动作。尽管如此,我不会这样。

相关问题