C#ParentForm.ActiveControl.Name

C#ParentForm.ActiveControl.Name,c#,winforms,C#,Winforms,根据我在VB6中的经验,上面的代码不起作用,因为如果用户不更改为相同的名称,它们就永远不相等 例如,UserControl名称是ucCalendar,当我拖动到我的From时,名称将自动更改为ucCalendar1,即使我可以更改为ucCalendar,但通常我们不会这样做 我认为编码人员想要比较UserControl是表单上唯一的控件还是ActiveControl,这样他就可以强制聚焦表单。 我不知道这个C#是否有效。请告诉我。WinForms代码中没有说明两个控件不能具有相同的名称。您这样认

根据我在VB6中的经验,上面的代码不起作用,因为如果用户不更改为相同的名称,它们就永远不相等

例如,UserControl名称是ucCalendar,当我拖动到我的From时,名称将自动更改为ucCalendar1,即使我可以更改为ucCalendar,但通常我们不会这样做

我认为编码人员想要比较UserControl是表单上唯一的控件还是ActiveControl,这样他就可以强制聚焦表单。
我不知道这个C#是否有效。请告诉我。

WinForms代码中没有说明两个控件不能具有相同的名称。您这样认为的原因是,您是从设计器的角度来看它的,当您使用设计器时,它不会让您拥有两个同名控件,因为它在代码中将它们用作字段名,并且您可能知道,在同一范围内不能有两个同名的字段/属性/变量。事实上,
控件的
名称
属性没有任何必要。

在这种情况下,不要忘记
this.ParentForm.ActiveControl
this
(相同的对象引用!!!)然后
ActiveControl.Name
将与
this.Name
进行比较。这就是说,除非(我猜)发生了不必要的事情,否则应该进行积极和集中的控制。我是VB6的家伙。在VB6中,在UserControl中,UserControl.Parent.ActiveControl.Name和UserControl.Name有不同的名称。我的调试窗口显示“ucCalendar1”和“ucCalendar”@在编辑
UserControl
时,ISunin WinForms将
Name
属性包含其名称(类名)。当您将该控件放到另一个容器中(您使用它)时,该名称将用于构建唯一的名称/id(即使不是严格要求)。当您从代码访问
Name
属性时(无论在何处),您将始终看到其实例的名称(然后是其唯一名称)。忘掉UI控件,把它看作类和实例。我以前的代码是用VB6编写的。UserControl.Parent.ActiveControl.Name是表单上的实例。我的调试窗口显示“ucCalendar1”,但在C#中,this.ParentForm.ActiveControl.Name显示“ucCalendar”。VB6和C#给出了不同的结果。也许我错过了什么。谢谢你的澄清。我更明白。我可以说这是VB6和C的区别。但我还没有用C#测试过,因为我不知道我应该用什么名字。如果你知道,请告诉我。
if (Operators.CompareString(this.ParentForm.ActiveControl.Name, this.Name, false) == 0)
{
base.Focus();
}