在c#中的表单之间传输变量

时间:2011-08-04 11:50:10

标签: c# winforms

我有两种形式 - Form1和Form2。

Form1中:

    public partial class Form1 : Form
    {
        public void Drawnewmap(bool suzey) {
            bool dsuzey=suzey;
            if (dsuzey==true) textBox1.Text = "1" ;

        }

        public Form1()
        {
            InitializeComponent();
        }
     }

窗体2:

private void button1_Click(object sender, EventArgs e)
{
    Form1 f1 = new Form1();
    bool m = false;
    if (checkBox1.Checked == true) m = true;
    f1.Drawnewmap(m);
    this.Close();
}

但是当我点击时,没有任何反应。 TextBox为空。为什么? 对不起英语不好,谢谢你的回答。

5 个答案:

答案 0 :(得分:2)

你永远不会真正展示表格,也许你应该有更多的东西:

我有两种形式 - Form1和Form2。

private void button1_Click(object sender, EventArgs e)
{
    Form1 f1 = new Form1();
    bool m = false;
    if (checkBox1.Checked == true) m = true;
    f1.Drawnewmap(m);
    f1.Show(); // You're missing this call
    this.Close();
}

答案 1 :(得分:2)

如果您想通过第二张表格到达第一张有效表格,您应该在第二张表格中定义第一张表格,如:

Form1 frm = (Form1)Application.OpenForms["Form1"];

而不是

Form1 f1 = new Form1();

如果您使用“Form1 f1 = new Form1();”,您将创建一个新表单,您将无法访问活动表单。

答案 2 :(得分:1)

您没有显示您创建的form1

private void button1_Click(object sender, EventArgs e)
{
    Form1 f1 = new Form1();
    bool m = false;
    if (checkBox1.Checked == true) m = true;
    f1.Drawnewmap(m);

    f1.Show();//or ShowDialog()...
    this.Close();
}

请注意,如果Form2是主要表单“你可以在Main处检查”,如果你关闭它,它将退出整个应用程序,所以如果是这种情况要么使form1成为主要表单,或调用此this.Hide();而不是this.Close();

答案 3 :(得分:1)

因为您创建了新的Form1实例。我认为在子窗口中从父窗口调用某些东西是个坏主意。但你可以这样做: 创建Form2时,传递对当前Form1对象的引用

Form2 form = new Form2(this);

在Form2构造函数中保存私有变量中的Form1引用。

private Form1 myform1;

然后你的代码需要看起来像这样:

private void button1_Click(object sender, EventArgs e)
{
    bool m = false;
    if (checkBox1.Checked == true) m = true;
    myform1.Drawnewmap(m);
    this.Close();
}

答案 4 :(得分:1)

我更喜欢使用包含状态

的表单中的属性来解决此问题

== 表格1 ==

public partial class Form1 : Form
{
    bool is_dsuzey;

    public Form1()
    {
        InitializeComponent();
    }

    protected override void OnLoad(EventArgs e)
    {
        base.OnLoad(e);

        if (is_dsuzey) textBox1.Text = "1";
    }
    public bool IsDsuzey { get { return is_dsuzey; } set { is_dsuzey = value; } }

}

== 表格2 ==

public partial class Form2 : Form
{
    public Form2()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        Form1 f1 = new Form1();
        f1.IsDsuzey = checkBox1.Checked;
        f1.Show();
    }
}

如果它是应用程序的主要形式,我会提醒this.Close();语句在Form2中,因为它会关闭整个应用程序。如果Application.Run()调用其他形式,则没有问题。