无法调用其他窗体的控件
本文关键字:控件 窗体 其他 调用 | 更新日期: 2023-09-27 18:01:10
我已经创建了一个方法来清除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();
}
从窗体2调用时,会显示"清除"消息,但文本框未清除。
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;
}
}
在表格2中,你可以称之为
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
}
}
希望这能帮助
Form1 f1=新Form1((;
您正在实例化Form1的新实例,而不是访问现有的Form1。
为了访问您的原始表格1,您必须将对原始表格1的引用传递给您的表格2。
例如,在表格2中,您可以添加以下内容:
Form1 _masterform;
void SetMaster(Form MyMaster)
{
_masterform = MyMaster;
}
然后,稍后您可以使用Form1.textbox1.clear((或类似的方法。
当然,还有其他方法可以做到这一点,这只是一种基本的方法。
MessageBox.Show
是一个静态方法,这意味着只有一个,它是全局的。
当您说Form1 f1 = new Form1();
正在制作Form1的新实例时,它不是您要查找的Form1
。
您可以调用screen_clear((。因为它是公共的。检查您的控件文本框1。可能它不是公共的。所以不会损坏
您永远不会调用f1.show。当创建Form1 f1=new Form1((时,内存中会有一个新的表单实例。这是在..上调用f1.screen_clear((的实例