Как я могу добавить проверенные элементы из одного контрольного списка в другой контрольный список?

Мне нужно добавить проверенные элементы из одного контрольного списка в другой. Я не должен добавлять элемент более одного раза во второй контрольный список. Дизайн имеет два контрольных списка и следующие кнопки: >,>>,‹,‹‹ Я попробовал приведенный ниже код, но не смог отобразить его. Пожалуйста, дайте мне знать, где я ошибаюсь:

namespace TwoListBox
{
    public partial class UserControl1 : UserControl
    {
        public UserControl1()
        {
            InitializeComponent();
        }

        public delegate void OneArrowForwardClickHandler();

        public event OneArrowForwardClickHandler OneArrowForward;

        private void button1_Click(object sender, EventArgs e)
        {
            OneArrowForward += new OneArrowForwardClickHandler(OneForward);
        }

        public void OneForward()
        {
            foreach (Object cs in checkedListBox1.CheckedItems)
            {
                if (!checkedListBox2.Items.Contains(cs))
                    checkedListBox2.Items.Add(cs.ToString());
                else
                {
                    MessageBox.Show("Item is already added");
                    continue;
                }
            }
        }

        public delegate void TwoArrowForwardClickHandler();

        public event TwoArrowForwardClickHandler TwoArrowForward;

        private void button2_Click(object sender, EventArgs e)
        {
            TwoArrowForward += new TwoArrowForwardClickHandler(TwoForward);
        }

        public void TwoForward()
        {
            foreach (Object cs in checkedListBox1.Items)
            {
                if (!checkedListBox2.Items.Contains(cs))
                    checkedListBox2.Items.Add(cs.ToString());
                else
                    MessageBox.Show("Items were already added");
            }
        }

        public delegate void OneArrowBackwardClickHandler();

        public event OneArrowBackwardClickHandler OneArrowBackward;

        private void button3_Click(object sender, EventArgs e)
        {
            OneArrowBackward += new OneArrowBackwardClickHandler(OneBackward);

        }

        public void OneBackward()
        {
            foreach (Object cs in checkedListBox1.CheckedItems)
            {
                checkedListBox2.Items.Remove(cs);
            }
        }

        public delegate void TwoArrowBackwardClickHandler();

        public event TwoArrowBackwardClickHandler TwoArrowBackward; 

        private void button4_Click(object sender, EventArgs e)
        {
            TwoArrowBackward +=new TwoArrowBackwardClickHandler(TwoBackward);
        }

        public void TwoBackward()
        {
            foreach (Object cs in checkedListBox1.Items)
            {
                checkedListBox2.Items.Remove(cs);
            }

        }

        private void button5_Click(object sender, EventArgs e)
        {
            string s = "The selected items are:";
            for (int i = 0; i < checkedListBox2.Items.Count - 1; i++)
            {
                s += checkedListBox2.CheckedItems[i].ToString() + "\n";
            }
            MessageBox.Show(s);
        }

    }
}

Примечание. > означает добавление отмеченных элементов, >> означает добавление всех элементов, ‹ означает удаление выбранных элементов, ‹‹ означает удаление всех элементов


person Milee    schedule 22.06.2012    source источник


Ответы (1)


В событиях нажатия кнопки вы только добавляете обработчик событий к событиям. Вы пытались вызвать функцию напрямую?

Вместо создания обработчика событий вызовите каждую из функций аналогично тому, как вы бы вызвали OneForward() ниже из события нажатия кнопки 1:

    private void button1_Click(object sender, EventArgs e)
    {
        OneForward();
    }

Ответ на комментарий

Если вы имеете в виду, что хотите сообщить родителю, что ваша кнопка была нажата и OneForward завершилась, вы можете использовать следующую строку в конце вашей функции OneForward:

OneArrowForward(this, new EventArgs());

Но если вы хотите вызвать OneForward из родителя, вам придется сделать его общедоступным, а затем из родителя вы просто вызовете:

myUserControlInstance.OneForward();
person Lloyd Powell    schedule 22.06.2012
comment
Эй, спасибо. Это сработало отлично, но что, если я хочу использовать их с событиями, так как это библиотека управления ›? - person Milee; 22.06.2012
comment
@Lily - я обновил свой ответ, чтобы помочь вам с вашим комментарием - person Lloyd Powell; 22.06.2012