如何在winforms中使用onclick事件设置自定义控件的属性

svmlkihl  于 2022-11-16  发布在  其他
关注(0)|答案(1)|浏览(129)

我制作了一个自定义控件(类名为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只是其中之一。我这样做是因为它们之间有一些共享的属性。

vawmfj5a

vawmfj5a1#

如果fcon不是CG,则“as”调用将返回null
你要做的是

if (fcon is CG cg)
{
    cg.id = ...
}

此代码块仅在fconCG时运行。
同样,您需要遍历fcon的parent并找到您要查找的控件,您可以找到相关的info here,然后在上面的代码中使用它。
学分,Reddit用户u/lmaydev的答案

相关问题