Получить имя объекта из строки и использовать его таким образом

Название может не иметь такого большого смысла, как я могу сделать здесь..

Скажем, у меня есть 5 флажков.. Для каждого из них я хочу один флажок, который я могу нажать, чтобы отметить / снять все элементы в соответствующем флажке.

Я мог бы легко сделать это, используя CheckedChanged на каждом из флажков, который проверяет / снимает отметку со всех элементов в их списках. Но я хочу сделать одну функцию, которая делает это для каждого списка. Как я могу это сделать? Я думал что-то вроде этого

    private void internalModsChkAll_CheckedChanged(object sender, EventArgs e)
    {
        testfunktion("internalModsChkAll", "internalModsChkList");
    }

    private void testfunktion(string from, string to) 
    {
        if ([from].Checked == true)
        {
            for (int i = 0; i < [to].Items.Count; i++)
            {
                [to].SetItemChecked(i, true);
            }
        }
        else
        {
            for (int i = 0; i < [to].Items.Count; i++)
            {
                [to].SetItemChecked(i, false);
            }
        }
    }

Я надеюсь, что вы можете увидеть, что я пытаюсь сделать здесь.. Однако выше не работает:(

Какие-либо предложения?

2 ответа

Предполагая WinForms, я думаю, что вы ищете Controls.Find() и Cast:

    private void testfunktion(string from, string to) 
    {  
        Control[] matches = this.Controls.Find(from, true);
        if (matches.Length > 0 && matches[0] is CheckBox)
        {
            CheckBox CB = (CheckBox)matches[0];
            matches = this.Controls.Find(to, true);
            if (matches.Length > 0 && matches[0] is CheckedListBox)
            {
                CheckedListBox CLB = (CheckedListBox)matches[0];
                for (int i = 0; i < CLB.Items.Count; i++)
                {
                    CLB.SetItemChecked(i, CB.Checked);
                }    
            }
        }
    }

По предложению лазыберезовского, здесь тот же код, что и в оригинальном посте, но работающий, чтобы другие могли видеть:-)

    private void internalModsChkAll_CheckedChanged(object sender, EventArgs e)
    {
        checkAll(internalModsChkAll, internalModsChkList);
    }

    public void checkAll(CheckBox from, CheckedListBox to) 
    {
        if (from.Checked == true)
        {
            for (int i = 0; i < to.Items.Count; i++)
            {
                to.SetItemChecked(i, true);
            }
        }
        else
        {
            for (int i = 0; i < to.Items.Count; i++)
            {
                to.SetItemChecked(i, false);
            }
        }
    }
Другие вопросы по тегам