【问题标题】:How to assign EventHandler to dynamic object in a loop?如何在循环中将 EventHandler 分配给动态对象?
【发布时间】:2018-12-25 15:03:57
【问题描述】:

我正在尝试为我的项目创建一个接口,并且我创建了一个 PSU 结构,例如:

public struct PSU
{
    public CheckBox CallHostessButton0, CallHostessButton1,
        ReadLightButton0, ReadLightButton1, ReadLightButton2, ReadLightButton3;
    public PictureBox BeltLight, SmokeLight;
}

public bool AssignObjectsToPSU(PSU psu, CheckBox CallHostessBtn0, CheckBox CallHostessBtn1,
CheckBox ReadLightBtn0, CheckBox ReadLightBtn1, CheckBox ReadLightBtn2, CheckBox ReadLightBtn3,
PictureBox BeltLght, PictureBox SmokeLght)
{
    try
    {
        Log("[Info] Assigning objects to PUS units...");
        psu.CallHostessButton0 = CallHostessBtn0;  
        // -> In here if possible <-
        psu.CallHostessButton1 = CallHostessBtn1;
        psu.ReadLightButton0 = ReadLightBtn0;
        psu.ReadLightButton1 = ReadLightBtn1;
        psu.ReadLightButton2 = ReadLightBtn2;
        psu.ReadLightButton3 = ReadLightBtn3;
        psu.BeltLight = BeltLght; psu.SmokeLight = SmokeLght;

        LogReport("[OK]");
        return true;
    }
    catch
    {
        LogReport("[Failed]");
        return false;
    }
}

我需要为这些对象分配对象事件,例如:

PSU TestPSU = new PSU;
TestPSU.CallHostessButton0 = checkBox1;
TestPSU.CallHostessButton0.CheckedChanged += new EventHandler(checkBox1_CheckedChanged);

所以我需要其中的 12 个“PSU”,并且必须为每个“PSU”分配它们。如上。这是我的问题:有没有简单的方法来完成这项任务?例如:在方法或循环中?比如:

public void AssignEvents(PSU p, CheckBox cb)
{
    p.CallHostessButton0.CheckedChanged += new EventHandler(cb_CheckedChanged);
}

或者在结构定义内部:

psu.CallHostessButton0 = CallHostessBtn0;
psu.CallHostessButton0.CheckedChanged = += new EventHandler(CallHostessBtn0_CheckedChanged);

感谢您的帮助。 :)

【问题讨论】:

    标签: c# loops events eventhandler


    【解决方案1】:

    您可以将委托作为附加参数传递给AssignObjectsToPSU

    public bool AssignObjectsToPSU(PSU psu, ..., EventHandler checkedChangedHandler)
    {
        ...
        psu.CheckedChanged  += checkedChangedHandler;
        ...
    }
    

    然后你可以调用它

    if (AssignObjectsToPSU(psu, ..., checkBox1_CheckedChanged)) {
        ...
    }
    

    请确保不要在checkBox1_CheckedChanged 之后附加大括号()

    在一个循环中

    foreach (PSU psu in myPsuList) {
        if (!AssignObjectsToPSU(psu, ..., checkBox1_CheckedChanged)) {
            break;
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-08-18
      • 1970-01-01
      • 2017-02-09
      • 2018-11-18
      • 1970-01-01
      • 1970-01-01
      • 2012-04-26
      • 2012-10-18
      相关资源
      最近更新 更多