Как я могу добавить отмеченные элементы из одного контрольного списка в другой контрольный список?
Мне нужно добавить проверенные элементы из одного флажка в другой. Я не должен добавлять элемент более одного раза во второй флажок. В дизайне есть два флажка и следующие кнопки: >,>>,<, << Я попробовал приведенный ниже код, но не смог получить никакого отображения. Пожалуйста, дайте мне знать, где я иду неправильно:
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);
}
}
}
Примечание:> означает добавить отмеченные элементы, >> означает добавить все элементы,<означает удалить выбранные элементы, << означает удалить все элементы
1 ответ
В ваших событиях нажатия кнопки вы только добавляете обработчик событий к событиям. Вы пытались вызвать функцию напрямую?
Вместо того, чтобы создавать обработчик событий, вызывайте каждую из функций, аналогично тому, как вы вызываете OneForward()
ниже от события нажатия кнопки button1:
private void button1_Click(object sender, EventArgs e)
{
OneForward();
}
Ответ на комментарий
Если вы имеете в виду, что хотите сообщить родителю, что ваша кнопка была нажата и OneForward завершен, вы можете выполнить следующую строку в конце функции OneForward:
OneArrowForward(this, new EventArgs());
Но если вы хотите вызвать OneForward от родителя, вам нужно будет сделать его общедоступным, тогда от родителя вы просто позвоните:
myUserControlInstance.OneForward();