无法调用其他窗体的控件

本文关键字:控件 窗体 其他 调用 | 更新日期: 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((的实例