我有一个Form(form1),它有一个ListBox和一个Button。单击该按钮,它将打开另一个窗体(form2)。在这个表格中我有一个TexBox和一个按钮。单击此按钮,无论我在此文本框中输入什么,都必须进入form1中的ListBox。请帮我找出解决方案。
答案 0 :(得分:2)
第1步:将列表框的修饰符属性设置为公开
第2步:在按钮上单击Form1,输入
Form2 fm2 = new Form2(this);
fm2.ShowDialog();
第3步:在Form2中,将以下声明放在顶层
private Form1 _fm1;
Also add a constructor :
public Form2(Form1 fm1)
{
_fm1 = fm1;
InitializeComponent();
}
第4步:在按钮中单击 Form2 ,输入以下行:
_fm1.ListBox1.Items.Add(Textbox1.Text);
this.Close(); //close the Form2
希望这有帮助。
答案 1 :(得分:0)
创建一个form1 public static Form1 _Form1;
的静态实例,然后你可以从其他表单中访问它而不需要创建一个实例:
我写了一个例子:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
_Form1 = this;
}
public static Form1 _Form1;
public void AddItem(object value)
{
listBox1.Items.Add(value);
}
private void button1_Click(object sender, EventArgs e)
{
Form2 _Form2 = new Form2();
_Form2.Show();
}
}
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
Form1._Form1.AddItem("your item");
}
}
答案 2 :(得分:0)
使Form1成为表单2的所有者,然后您可以从Form2访问Form1:
<强> Form1中:强>
private void Form1Button_Clicked(object sender, EventArgs e)
{
Form2 f2 = new Form2();
f2.Owner = this;
f2.Show();
}
public void AddListItem(object text)
{
YourListBox.Items.Add(text);
}
<强>窗体2:强>
private void Form2Button_Clicked(object sender, EventArgs e)
{
Form1 f1 = (Form1)Owner;
f1.AddListItem(YourTextBox.Text;);
Close();
}
答案 3 :(得分:0)
当您打开第二个表单时,会传递对当前表单的引用:
var form2 = new Form2(this);
form2.Show();
在form2的构造函数中保存引用并使用单击处理程序中的引用
class Form2
{
private Form1 _form1;
public Form2()
{
// ...
}
public Form2(Form1 form1):this()
{
_form1 = form1;
}
void Button_Click(object sender, EventArgs e)
{
if(_form1 != null)
{
_form1.AddValue(textBox1.Text);
}
}
}
最好定义一个包含方法'AddValue'的接口,而不是使用Form1类型使用接口:
interface IAddValues
{
void AddValue(string value);
}
class Form1: IAddValues
{
// ...
public void AddValue(string value)
{
// ...
}
}
// somewhere in form1:
var form2 = new Form2(this as IAddValues);
form2.Show();
在form2的构造函数中保存引用并使用单击处理程序中的引用
class Form2
{
private IAddValues _valueAdder;
public Form2()
{
// ...
}
public Form2(IAddValues valueAdder):this()
{
_valueAdder = valueAdder;
}
void Button_Click(object sender, EventArgs e)
{
if(_valueAdder != null)
{
_valueAdder.AddValue(textBox1.Text);
}
}
}