【问题标题】:Passing data between form1 and form2 in C# [duplicate]在C#中在form1和form2之间传递数据[重复]
【发布时间】:2017-05-10 03:58:25
【问题描述】:

我应该为孩子们制作一个数学练习程序。他们应该能够选择 1 个操作和数字的位数(1、2 或 3 位)。然后它必须根据孩子的选择提出10个随机问题,然后一旦他们完成了测验,它就会显示他们的结果以及他们错了哪些问题。

我在 form1 上进行了两个选择,操作和数字编号,它们被分配了数字 (1. (*) 2. (/) 3. (+) 4. (-))。我需要做的就是将操作编号和数字# 传达给form2,然后将在其中生成和显示问题。

到目前为止,这是我的 form1 代码:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace FinalProject
{
public partial class Form1 : Form
{
   public static int operation = 0;
    public static int digits = 0;

    public Form1()
    {
        InitializeComponent();
    }
    // this is to make sure only one box is checked for both selections. Starts here
    private void label1_Click(object sender, EventArgs e)
    {

    }

    private void button2_Click(object sender, EventArgs e)
    {

    }

    private void MulCB_CheckedChanged(object sender, EventArgs e)
    {


        if ( MulCB.Checked == true)
        {
            operation = 1;
            DivCB.Checked = false;
            AddCB.Checked = false;
            SubCB.Checked = false;
        }
    }

    private void DivCB_CheckedChanged(object sender, EventArgs e)
    {
        if (DivCB.Checked == true)
        {
            operation = 2;
            MulCB.Checked = false;
            AddCB.Checked = false;
            SubCB.Checked = false;
        }
    }

    private void AddCB_CheckedChanged(object sender, EventArgs e)
    {
        if (AddCB.Checked == true)
        {
            operation = 3;
            DivCB.Checked = false;
            SubCB.Checked = false;
            MulCB.Checked = false;
        }
    }

    private void SubCB_CheckedChanged(object sender, EventArgs e)
    {
        if (SubCB.Checked == true)
        {
            operation = 4;
            DivCB.Checked = false;
            AddCB.Checked = false;
            MulCB.Checked = false;
        }
    }

    private void oneDCB_CheckedChanged(object sender, EventArgs e)
    {
        if(oneDCB.Checked == true)
        {
            digits = 1;
            twoDCB.Checked = false;
            threeDCB.Checked = false;
        }
    }

    private void twoDCB_CheckedChanged(object sender, EventArgs e)
    {
        if ( twoDCB.Checked == true)
        {
            digits = 2;
            oneDCB.Checked = false;
            threeDCB.Checked = false;
        }
    }

    private void threeDCB_CheckedChanged(object sender, EventArgs e)
    {
        if (threeDCB.Checked == true)
        {
            digits = 3;
            oneDCB.Checked = false;
            twoDCB.Checked = false;
        }
    }
    private void button8_Click(object sender, EventArgs e)
    {
        // operations: 1. (*) 2. (/) 3. (+) 4. (-)
        // digits are as number indicates.



        // Second window popup.
        Form2 settingsForm = new Form2();
        settingsForm.Show();
    }
}
}

这是form2,几乎是赤裸的。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace FinalProject
{

public partial class Form2 : Form
{


    public Form2()
    {
        InitializeComponent();
    }

    private void FinishedBtn_Click(object sender, EventArgs e)
    {


    }
}

}

【问题讨论】:

  • 嗨,萨尔!您能否将您的问题编辑为:1. 包含更少的代码,2. 说出您尝试过的内容,有效和无效的内容,以及 3. 具体说明您想发送/接收哪些信息以及您需要帮助的具体内容和?另外,我认为@DourHighArch 可能是正确的,这个问题是重复的。
  • 如果您愿意,可以前往help center 获取有关如何针对 SO 提出更合适问题的提示。祝你好运,谢谢!
  • 你把变量放在了错误的表格里。 public static int operation = 0; public static int digits = 0; 应该在 form2 中,而不是 1。它们是 Form 的属性,可以在调用新实例后设置(如 Form2 settingsForm = new Form2();
  • @rudib 好的,我现在将变量放在 form2 中,我对“调用新实例”的意思感到困惑。如果表格 2 是“订阅者”,表格 1 是“发布者”,我在表格 1 中输入什么。这并不紧急,但它会在 4 天内到期。
  • settingsForm 是“新实例”。很抱歉让您感到困惑。参考:docs.microsoft.com/en-us/dotnet/articles/csharp/…

标签: c# winforms transfer


【解决方案1】:

这可能有效。 代码中有cmets。

工作流正在创建Form2 类的新实例并设置两个公共变量。公共意味着可以从类外部访问它们(如果需要,请参阅here)。然后调用Show() 方法并出现Form。在Form2 代码中,公共变量现在具有先前指定的值并且可以使用。

Form1:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace FinalProject
{
public partial class Form1 : Form
{    
    public Form1()
    {
        InitializeComponent();
    }
    // this is to make sure only one box is checked for both selections. Starts here
    private void label1_Click(object sender, EventArgs e)
    {

    }

    private void button2_Click(object sender, EventArgs e)
    {

    }

    private void MulCB_CheckedChanged(object sender, EventArgs e)
    {


        if ( MulCB.Checked == true)
        {
            operation = 1;
            DivCB.Checked = false;
            AddCB.Checked = false;
            SubCB.Checked = false;
        }
    }

    private void DivCB_CheckedChanged(object sender, EventArgs e)
    {
        if (DivCB.Checked == true)
        {
            operation = 2;
            MulCB.Checked = false;
            AddCB.Checked = false;
            SubCB.Checked = false;
        }
    }

    private void AddCB_CheckedChanged(object sender, EventArgs e)
    {
        if (AddCB.Checked == true)
        {
            operation = 3;
            DivCB.Checked = false;
            SubCB.Checked = false;
            MulCB.Checked = false;
        }
    }

    private void SubCB_CheckedChanged(object sender, EventArgs e)
    {
        if (SubCB.Checked == true)
        {
            operation = 4;
            DivCB.Checked = false;
            AddCB.Checked = false;
            MulCB.Checked = false;
        }
    }

    private void oneDCB_CheckedChanged(object sender, EventArgs e)
    {
        if(oneDCB.Checked == true)
        {
            digits = 1;
            twoDCB.Checked = false;
            threeDCB.Checked = false;
        }
    }

    private void twoDCB_CheckedChanged(object sender, EventArgs e)
    {
        if ( twoDCB.Checked == true)
        {
            digits = 2;
            oneDCB.Checked = false;
            threeDCB.Checked = false;
        }
    }

    private void threeDCB_CheckedChanged(object sender, EventArgs e)
    {
        if (threeDCB.Checked == true)
        {
            digits = 3;
            oneDCB.Checked = false;
            twoDCB.Checked = false;
        }
    }
    private void button8_Click(object sender, EventArgs e)
    {
        // operations: 1. (*) 2. (/) 3. (+) 4. (-)
        // digits are as number indicates.



        // Second window popup.
        // it's the question form, right?
        Form2 questionForm = new Form2();
        //"Write" your settings in the other form's variables
        //You will have to write code that finds out which checkbox is which number! For now its fixed.
        questionForm.operation = 2;
        questionForm.digits = 1;
        questionForm.Show();
        //Hide Form1
        this.Hide();
    }
}
}

Form2:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace FinalProject
{

public partial class Form2 : Form
{
    public static int operation;
    public static int digits;


    public Form2()
    {
        InitializeComponent();

    }

    //do NOT paste this. It can be added by creating an event handler
    // you also might not need this, but this method is called when this Form appears. It's an example.
    // https://msdn.microsoft.com/en-us/library/zwwsdtbk(v=vs.80).aspx
    private void Form2_Load(object sender, EventArgs e)
    {
       //here you can use your variables for example (also anywhere within this class!)
       //e.g.
       Textbox1.Text = (string)operation;   
    }

    private void FinishedBtn_Click(object sender, EventArgs e)
    {


    }
}
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-05-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-28
    • 1970-01-01
    • 1970-01-01
    • 2015-05-19
    相关资源
    最近更新 更多