我已经构建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