无法调用其他表单的控件

时间:2011-07-06 04:06:21

标签: c# methods controls

我创建了一个方法来清除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调用时,会显示“清除”消息但文本框未清除。

5 个答案:

答案 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()调用的实例..