我正在尝试将项目从其他表单添加到列表框中。 Form1有一个带有“Dummy”项目的列表框,当我尝试从该表单添加更多项目时,一切正常。但是,当我尝试从其他表单添加项目(AddContact.cs)时,没有添加任何项目。我将从两种表格中提供代码。
PS:列表框设置为public,以便能够从Form1外部访问它。
Form1中:
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
list_names.Items.Add("Dummy");
}
private void btn_check_Click(object sender, EventArgs e)
{
if (list_names.SelectedItem == null)
{
MessageBox.Show("No item has been selected.", "Error",
MessageBoxButtons.OK, MessageBoxIcon.Error);
}
else if (list_names.SelectedItem.ToString() == "Dummy")
{
//Dummy code for testing
MessageBox.Show("Dummy has been selected!");
}
}
private void btn_add_Click(object sender, EventArgs e)
{
new AddContact().Show();
}
private void btn_remove_Click(object sender, EventArgs e)
{
//TODO: Remove items from listbox
}
的addContact:
Form1 form;
public AddContact()
{
InitializeComponent();
form = new Form1();
}
private void btn_add_Click(object sender, EventArgs e)
{
if (textBox1.Text == string.Empty)
{
MessageBox.Show("No input has been given.");
}
else
{
//This doesn't work
string s = textBox1.Text;
form.list_names.Items.Add(s);
textBox1.Text = "";
}
}
答案 0 :(得分:0)
问题是您在AddContact
中创建新表单,需要引用Form1
。
Form1 form;
public AddContact(Form1 frm)
{
InitializeComponent();
form = frm;
}
以及
private void btn_add_Click(object sender, EventArgs e)
{
new AddContact(this).Show();
}
答案 1 :(得分:0)
一个小解决方法是一个事件处理程序
只需派出自己的EventArgs
public class AddItemEventArgs : EventArgs
{
public string Item { get; set; }
}
并将此代码添加到AddContanct-Form:
public event EventHandler OnAddItemNeeded(object sender, AddItemEventArgs);
在btn_add_click
方法中,您必须触发此事件:
this.OnAddItemNeeded(this, new AddItemEventArgs() { Item = textBox1.Text });
在Form1中调用AddContact的新实例时:
AddContact ac = new AddContact();
ac.OnAddItemNeeded += new EventHandler(this.OnAddItemNeeded);
ac.Show();
在Form1中执行工作的处理程序:
private void OnAddItemNeeded(object sender, AddItemEventArgs e)
{
list_names.Items.Add(e.Item);
}
答案 2 :(得分:0)
public partial class Form1 : Form
{
public static List<string> lst=new List<string>();
private void Form1_Load(object sender, EventArgs e)
{
if (lst != null)
listBox1.DataSource = lst;
}
}
public partial class Form2 : Form
{
private void button1_Click(object sender, EventArgs e)
{
Form1.lst.Add(textBox1.Text);
textBox1.Text = string.Empty;
}
}
答案 3 :(得分:-1)
好吧,你在AddContact构造函数中初始化Form1,这就是问题所在。
试试这个:
的addContact:
Form1 form;
public AddContact(Form1 f)
{
InitializeComponent();
form = f;
}
private void btn_add_Click(object sender, EventArgs e)
{
if (textBox1.Text == string.Empty)
{
MessageBox.Show("No input has been given.");
}
else
{
string s = textBox1.Text;
form.list_names.Items.Add(s);
textBox1.Text = "";
}
}
然后添加按钮:
private void btn_add_Click(object sender, EventArgs e)
{
new AddContact(this).Show();
}