Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/sharepoint/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在C语言中在窗体之间传递变量_C#_Winforms - Fatal编程技术网

C# 在C语言中在窗体之间传递变量

C# 在C语言中在窗体之间传递变量,c#,winforms,C#,Winforms,我有两张表格——表格一和表格二 表格1: public partial class Form1 : Form { public void Drawnewmap(bool suzey) { bool dsuzey=suzey; if (dsuzey==true) textBox1.Text = "1" ; } public Form1() {

我有两张表格——表格一和表格二

表格1:

    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();
}
但当我点击时,什么也没发生。文本框是空的。为什么?

您没有显示您创建的表单1

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是主窗体,您可以在主窗体上对此进行检查,如果关闭它,它将退出整个应用程序,因此如果是这种情况,请将form1作为主窗体,或者将其称为this.Hide;而不是这个。关闭

您从未实际显示过表单,也许您应该有更像:

我有两张表格——表格一和表格二

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();
}

因为您创建了新的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();
}

我更喜欢使用持有状态的表单中的属性来解决这个问题

==表格1==

==表格2==


我要提醒大家,在这里加上一个字母;语句,因为它将关闭整个应用程序。如果Application.Run调用其他表单,则没有问题。

如果希望通过第二个表单访问第一个活动表单,则应在第二个表单中定义第一个表单,如下所示:

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

Form1 f1 = new Form1();

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

FYI-您不必在条件中使用==true。您可以说如果checkBox1.Checked m=true;。如果dusuzey textBox1.Text=1;,则相同;。这将迫使您对变量进行命名,以便能够立即清楚地知道它们是真是假,就像bool is_box_checked。。ifis_box_checked{..}@ja72:它应该更像一个谓词,而不是一个疑问句:box_已选中,因此:如果box_已选中。。。。
Form1 frm = (Form1)Application.OpenForms["Form1"];
Form1 f1 = new Form1();