在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();
}
}
}
您有两个选择:
- 使用带有属性的静态类在 中存储值<<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模式了解更多信息。