如何在C#中将字符串值传递给另一个表单的加载事件

时间:2017-03-29 23:11:20

标签: c#

(我目前正在服用c#,但我从未参加过任何必备课程,所以请原谅我有限的理解。)

到目前为止,我所看到的答案并不是我对这个项目所需要的。

这是我到目前为止所做的:

// Form1

private void printToolStripMenuItem_Click(object sender, EventArgs e)
        {
            string strStatus = "";
            if (rdoMarr.Checked)
            {
                strStatus = "Married";
            }
            else
            {
                strStatus = "Single";
            }
                    string strPrint = "Marital Status = " + strStatus + "\n Pay         Period =" + cbPayPd.Text + "\n Dependents =" + cbAllow.Text + "\n Gross = " + txtGross.Text + "\n Fit = " + txtFit.Text + "\n Soc = " + txtSoc.Text + "\n Med = " + txtMed.Text + "\n Net = " + txtNet.Text;
            var form2 = new Print(strPrint);
            form2.Show();
        }

我的Form2需要什么才能收到此字符串?

1 个答案:

答案 0 :(得分:0)

有很多方法可以做到这一点。下面的那个不是我推荐的,但我认为这是最容易理解的。

这是实现此目的的一种方法:

  1. Form1类上创建一个公共静态属性以保存此变量的值
  2. 使用步骤#1中的属性作为MessageBox文本
  3. 创建一个方法,使用您想要的文本
  4. 更新此属性
  5. 在表单加载
  6. 时调用#3中的方法
  7. 创建一个调用#2
  8. 中方法的公共EventHandler方法
  9. 将在字符串中使用其文字的TextChanged个对象的TextBox事件连接到#4中创建的公共EventHandler
  10. 加载Form2时引用#2中的属性
    • 我的示例假设您希望使用文本更新表单上的Label label1
  11. 以下是:

    public partial class Form1 : Form
    {
        // 1. This class-level variable will hold our string
        public static string PrintMessage { get; private set; }
    
        // 2. Reference your strPrint variable for the MessageBox as you were before
        private void printToolStripMenuItem_Click(object sender, EventArgs e)
        {
            MessageBox.Show(PrintMessage);
        }
    
        // 3. This method will update our string with values from TextBoxes
        private void UpdateText()
        {
            PrintMessage = "Gross = " + txtGross.Text + "\n Fit = " + txtFit.Text +
                "\n Soc = " + txtSoc.Text + "\n Med = " + txtMed.Text +
                "\n Net = " + txtNet.Text;
        }
    
        // 4. Call our update method when the Form loads
        private void Form1_Load(object sender, EventArgs e)
        {
            UpdateText();
        }
    
        // 5. This EventHandler just calls our update method
        private void CommonTextChangedEvent(object sender, EventArgs e)
        {
            UpdateText();
        }
    
        // I have a `button1` on my Form1, and clicking this button shows Form2
        private void button1_Click(object sender, EventArgs e)
        {
            var form2 = new Form2();
            form2.Show();
        }
    

    现在,挂钩事件处理程序。最简单的方法是:

    1. 一次选择一个在我们的字符串中使用Text的文本框
    2. 在“属性”窗口中,单击Events按钮(看起来像闪电)
    3. 选择TextChanged事件,并为其指定新方法
    4. enter image description here

      现在,在您的Form2课程中,您应该能够引用您在#1中创建的Form1媒体资源:

      public partial class Form2 : Form
      {
          private void Form2_Load(object sender, EventArgs e)
          {
              label1.Text = Form1.PrintMessage;
          }
      

      要测试它,只需运行项目,更改文本框中的文本,然后单击按钮以加载Form2