在c#中从一个表单获取数据到另一个表单

本文关键字:表单 一个 获取 数据 另一个 | 更新日期: 2023-09-27 17:54:08

尊敬的用户,我试图传递一个值Form2到Form1,首先在Form1上的文本框,如果我按Escape键,然后它会移动我到Form2,现在我想当我在Form2文本框中输入值,然后按下按钮,然后控制移动到Form1和关闭Form2,并显示Form2的值。文本框导入Form1。文本框进一步,我将显示这个值在MessageBox在Form1按下按钮,请指导我在最简单的方式,我将非常感谢。

这里是我使用的代码

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace twoFormsDemo
{
public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }
    private void textBox1_KeyUp(object sender, KeyEventArgs e)
    {
        if (e.KeyCode == Keys.Escape)
        {
            Form2 form2 = new Form2();
            form2.ShowDialog();
            this.Close();
        }
    }
    private void Form1_Load(object sender, EventArgs e)
    {
        Form1 form1 = new Form1();
        textBox1.Text = Form2.SetValueForText;
        form1.Refresh();
    }
    private void button1_Click(object sender, EventArgs e)
    {
        MessageBox.Show(textBox1.Text);
    }
}
}

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace twoFormsDemo
{
public partial class Form2 : Form
{
    public Form2()
    {
        InitializeComponent();
    }
    public static string SetValueForText = "";
    private void button1_Click(object sender, EventArgs e)
    {
        SetValueForText = textBox1.Text;
        Form2 form2 = new Form2();
        form2.SendToBack();
        this.Close();
    }
}
}

在c#中从一个表单获取数据到另一个表单

您有两个选择:

  • 使用带有属性的静态类在
  • 中存储值<<li>使用事件/gh>

如果您不想在其他任何地方访问这个值,我建议使用第二种方法。

创建一个带有自定义EventArgs的事件,允许您在Form2中存储字符串,并确保在需要时触发它。您可以在创建Form2实例时在Form1中订阅此事件。然后,您可以在事件处理程序中使用字符串值。

你离…不远了

通过设置DialogResult来改变Form2。这将取消它,并在ShowDialog点返回Form1的执行。您的字段需要是static,但是:

public partial class Form2 : Form
{
    public Form2()
    {
        InitializeComponent();
    }
    public string SetValueForText = "";
    private void button1_Click(object sender, EventArgs e)
    {
        SetValueForText = textBox1.Text;
        this.DialogResult = DialogResult.OK;
    }
}

现在在Form1中,使用Form2的实例来获取"OK"返回时的值:

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }
    private void textBox1_KeyUp(object sender, KeyEventArgs e)
    {
        if (e.KeyCode == Keys.Escape)
        {
            Form2 form2 = new Form2();
            if (form2.ShowDialog() == DialogResult.OK)
            {
                textBox1.Text = form2.SetValueForText;
            }
        }
    }
    private void button1_Click(object sender, EventArgs e)
    {
        MessageBox.Show(textBox1.Text);
    }
}

*在你的Load()事件摆脱代码!

你需要把Form看作一个愚蠢的UI层。应该有一个较低的层来创建这些表单并与它们一起工作。看看你的表单的实例是在哪里创建的(为了灵感)。查看MVC和MVVM模式了解更多信息。