我制作了一个自定义控件(类名为CG),它具有以下属性:
public int type = 0;
public string control_name { get; set; }
public int decimal_pt { get; set; }
然后,在动态创建控件时,会向其分配一个上下文菜单,如下所示:
void addDevProc(int type)
{
if (type == 0)
{
CG Cont = new CG();
//Right Click settings
MenuItem miprop = cm.MenuItems.Add("Properties");
Cont.ContextMenu = cm;
miprop.Click += devSet;
fcon.Controls.Add(Cont);
}
}
然后我调用一个对话框来更改上述变量,如下所示:
private void devSet(object sender, EventArgs e)
{
Control_Settings cs = new Control_Settings(fcon, fcon.GetType());
var drDispSettings = cs.ShowDialog();
if(drDispSettings == DialogResult.OK)
{
ControlProps tempProps = new ControlProps();
tempProps = cs._set;
// Transfer Properties to device
switch (tempProps.UnitType)
{
case 0:
CG control = new CG();
control.id = tempProps.UnitAddress;
control.decimal_pt = tempProps.UnitDecimal;
break;
...
}
}
}
这里的_set是ControlProps类型的属性。
现在我想根据_set设置fcon(焦点控件)的属性。
我已经尝试过了:
(fcon as CG).id = tempProps.UnitAddress; // It gives error "Object Reference not set..."
(CG)fcon.id = tempProps.UnitAddress;// Doesn't work "Control dosen't contain defination of id"
如果你能给我指个方向就太好了,谢谢你的帮助!
编辑1:fcon
(fcon的类型为控件)是右键单击的控件。CG
是代表“控制图形”的类。ControlProps
也是一个类,它有一些属性和方法,这些属性和方法是为我制作的不同类型的自定义控件而通用的,CG
只是其中之一。我这样做是因为它们之间有一些共享的属性。
1条答案
按热度按时间vawmfj5a1#
如果
fcon
不是CG
,则“as”调用将返回null
。你要做的是
此代码块仅在
fcon
为CG
时运行。同样,您需要遍历fcon的parent并找到您要查找的控件,您可以找到相关的info here,然后在上面的代码中使用它。
学分,Reddit用户u/lmaydev的答案