我创建了一个方法来清除form1中的文本框,我可以清除它但是当我从Form2调用此方法时,form1文本框不会清除。请帮助我。
表格1:
private void Clear_Click(object sender, EventArgs e)
{
screen_clear();
}
public void screen_clear()
{
MessageBox.Show("Clear");
textBox1.Text = "";
}
表格2:
private void Clear_Click(object sender, EventArgs e)
{
Form1 f1 = new Form1();
f1.screen_clear();
this.Close();
}
从form2调用时,会显示“清除”消息但文本框未清除。
答案 0 :(得分:1)
Form1 f1 = new Form1();
这将创建form1的新实例。这不是运行应用程序从Program.cs创建的form1实例。您可以通过以下代码执行此操作
public partial class Form1 : Form
{
static public Form1 thisForm;
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
Form2 a = new Form2();
a.Show();
}
private void Form1_Load(object sender, EventArgs e)
{
thisForm = this;
}
}
并且在form2中,您可以将其称为
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
}
private void Form2_Load(object sender, EventArgs e)
{
Textbox tb = Form1.thisForm.Controls["textbox1"] as Textbox;
// Now write you code here
}
}
希望这有帮助
答案 1 :(得分:0)
Form1 f1 = new Form1();
您正在实例化Form1的新实例,而不是访问现有的Form1。
要访问原始表单1,您必须将对原始Form1的引用传递给Form2。
例如,在form2中你可以添加:
Form1 _masterform;
void SetMaster(Form MyMaster)
{
_masterform = MyMaster;
}
然后你可以使用Form1.textbox1.clear()或诸如此类的东西。
当然还有其他方法可以做到这一点,这只是一种基本方式。
答案 2 :(得分:0)
MessageBox.Show
是一个静态方法 - 意味着只有一个,它是全局的。
当您说Form1 f1 = new Form1();
您正在制作Form1的新实例时,它不是您要找的Form1
。
答案 3 :(得分:0)
你可以调用screen_clear()。因为它是公共的。检查你的控件textBox1.可能它不公开。所以不要担心
答案 4 :(得分:0)
你永远不会打电话给f1.show。当Form1 f1 = new Form1()创建时,表单的新实例在内存中。这是f1.screen_clear()调用的实例..