Как назначить EventHandler для динамического объекта в цикле? - PullRequest
0 голосов
/ 25 декабря 2018

Я пытаюсь создать интерфейс для своего проекта, и я создал структуру блока питания, например:

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 таких «блоков питания», и я должен назначить их для каждого.Как и выше.Вот мой вопрос: есть ли простой способ выполнить это задание?Пример: в методе или цикле?Что-то вроде:

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

Или внутри определения структуры:

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

Спасибо за помощь.:)

1 Ответ

0 голосов
/ 25 декабря 2018

Вы можете передать делегату 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;
    }
}
...