我已经构建了2个自定义控件。控件A和控件B
这些控件分为多种形式。
让我们从A和B中假设
现在假设用户单击表单A中的控件A.并且调用此控件单击事件。
现在如何确定控件A位于表单A中。
这样我就可以改变Form A的Control B的特定属性。
答案 0 :(得分:1)
您可以递归使用Control.Parent
。如果您没有嵌套表单,也可以使用Control.TopLevelControl
。然后,您需要以递归方式遍历Controls
属性以找到第二个控件。
但更适当的解决方案是在第一个控件中创建一个属性并将其设置为第二个控件并在事件处理程序中使用它。
答案 1 :(得分:0)
处理每个表单内的控件A事件..
答案 2 :(得分: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);
}
您可以使用另一个'hack'选项,这是迄今为止最简单的选项。您可以使用控件'tag'属性来存储您喜欢的任何内容,例如指向ControlB的指针。
ControlA a = new ControlA();
ControlB b = new ControlB();
a.Tag = b;
注意这是一个hack,正确的方法是自己在自定义控件上创建这样的字段/变量。它或多或少是一个如何运作的演示。
如果您的表单不是动态创建的,那么Akram Shahda的答案只是一个选项,因为您可以预定义所有操作。不过我不会这样做。