c#winform如何把另一窗口中的textbox值调用过来
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c#winform如何把另一窗口中的textbox值调用过来相关的知识,希望对你有一定的参考价值。
急急急
步骤1:在Form1上,布置一个TextBox(textBox1)和一个按钮(button1)
步骤2:在项目中添加一个窗体Form2。在Form2上布置一个Label(label1)。Form2的后台Form2.cs代码如下:
using System.Windows.Forms;namespace WindowsFormsApp1
public partial class Form2 : Form
public Form2()
InitializeComponent();
// 新编写一个构造函数
public Form2(string text) : this()
label1.Text = text;
步骤3:Form1的后台代码Form1.cs如下
using System;using System.Windows.Forms;
namespace WindowsFormsApp1
public partial class Form1 : Form
public Form1()
InitializeComponent();
private void button1_Click(object sender, EventArgs e)
// 用我们自己编写的构造函数创建Form2,传入文本框text1.Text
Form2 f2 = new Form2(textBox1.Text);
f2.Show();
运行结果如下:
追问我想在form2中点击button然后在form2中的textbox中出现form1中某个textbox的值,这样可以吗?
追答可以。这样做:
1)修改Form1后台代码Form1.cs,增加一个属性
public partial class Form1 : Form……
// 增加一个属性Message
public string Message
get return text1.Text;
private void button1_Click(object sender,EventArgs e)
// 用造函数创建Form2
Form2 f2 = new Form2(this);
f2.Show();
2)在Form2上增加一个Button(button1);后台代码Form2.cs
public partial class Form2 : Form……
private Form1 form1;
// 新编写一个构造函数,参数是Form1实例
public Form2(Form1 f1) : this()
form1 = f1;
public void button1_Click(object sendor,EventArgs e)
// 通过Form1的属性Message取得文本信息
lable1.Text = f1.Message;
参考技术A
软糖来回答把。
C#和VB.net不一样,窗体是类,而不是唯一的对象,所以必须指向该Form才能引用其中的对象。
首先在Form2定义一个全局静态字段 存储当前窗体
public Form2 curForm2;private void Form2_Load(object sender, EventArgs e)
curForm2 = this;
然后在Form5中即可调用,注意,如果Form2从未启动,则会引发null错误。
curForm2.textbox满意请采纳,谢谢。
追问是这样引用吗?
还是出问题呀,怎么解决
加个static Form3 curForm3
追问能不能具体的操作代码写一下,我很菜,谢谢
我还是实现不了
显示要先判定是否为null什么的
现在我还有个问题是form3调试后有计算数据,但是在调试过程中从form4返回form3的时候,刚刚form3计算调试的数据都没有了,和没有调试之前的窗口一样,这个怎么解决
当我返回上一页的时候,又是空的了
追答重新做了一个,实测可以。
点击Form1的按钮打开Form2,关闭后返回Form1,每次打开Form2文本框都递增一个A字母。
注意要给Form2添加一个FormClosing事件,里面把关闭改为隐藏,使用e.Cancel=true取消关闭事件。还要给Form2添加一个FormLoad事件,把控件textbox1赋值给变量tbox1。
具体代码有没有,这些我觉得我写出来有问题
拜托啦
发生了null错误,但是我的form启动的呀
代码是if(curForm3.textBox37.Text!=null)
textBox4.Text=curForm3.textBox37.Text;
else
C#-WinForm-跨窗体 构造函数传值 及应用—登录式窗口传值如何关闭主页面时关闭应用程序如何打开唯一窗口—★★★★★五星重量级
构造函数可以传任意类型的值,并可以同时传多个值
结构函数传值的初步应用——简单的登陆式界面
现在我有两个窗体Form3和Form4,如下,如何点击Form3中的按钮后,打开Form4并将Form3中的textbox中的值传给Form4的label?
1、点击Form3中的按钮打开Form4 2、获取Form3中的值 3、传值给Form4中的label
一、获取Form3中textbox1的值
button1的点击事件:
namespace 记事本 { public partial class Form3 : Form { public Form3() { InitializeComponent(); } //button1的点击事件 private void button1_Click(object sender, EventArgs e) { string s = textBox1.Text;//获取Form3中textbox的值 Form4 f4 = new Form4();//创建新的Form4 f4.Show();//展示Form4 } }
二、通过构造函数传值 - 在新建Form4时将值传入,同时Form4的结构函数要接收相同类型的值,比如例子中传入string类型的值
namespace 记事本 { public partial class Form3 : Form { public Form3() { InitializeComponent(); } //button1的点击事件 private void button1_Click(object sender, EventArgs e) { string s = textBox1.Text;//获取Form3中textbox的值 Form4 f4 = new Form4(s);//创建新的Form4,并将数据s传入 f4.Show();//展示Form4 } } }
namespace 记事本 { public partial class Form4 : Form { string str = null;//定义一个变量 public Form4(string txt) { InitializeComponent(); str = txt;//变量接收传入的值 } } }
三、将接收的值赋值给label1
namespace 记事本 { public partial class Form4 : Form { string str = null;//定义一个变量 public Form4(string txt) { InitializeComponent(); str = txt;//变量接收传入的值 label1.Text = str;//赋值 } } }
四、测试:
=============================================================
结构函数传值的初步应用——关闭应用程序
如何关闭程序?比如说,系统启动时启动的是<启动页面Form3>,打开<主页面Form4>后,关闭Form4并不能关闭程序,而当关闭Form3时,程序才会关闭。
可是当关闭<主页面Form4>时并不能关闭<启动页面Form3>,程序依然无法退出,此时该如何关闭程序呢?
方法:将<启动页面Form3>窗体传入<主页面Form4>,此时Form4可以控制Form3行为,设置Form4关闭时,Form3同时关闭,即可实现应用程序关闭。
将窗体传入?将窗体传入后,既可以实现在一个窗体中控制另一个窗体。
如何将窗体传入?(this - 代码所在的窗体)
public partial class Form3 : Form { public Form3() { InitializeComponent(); } //button1的点击事件 private void button1_Click(object sender, EventArgs e) { Form4 f4 = new Form4(this);//创建新的Form4,并将窗体本身传入 f4.Show();//展示Form4 } }
public partial class Form4 : Form { Form3 F3 = new Form3();//实例化一个Form3的变量 public Form4(Form3 f3)//传入窗体 { InitializeComponent(); F3 = f3;//接收窗体 } }
设置Form4关闭时Form3关闭
public partial class Form4 : Form { Form3 F3 = new Form3();//实例化一个Form3的变量 public Form4(Form3 f3)//传入窗体 { InitializeComponent(); F3 = f3;//接收窗体 } //Form4关闭时 private void Form4_FormClosing(object sender, FormClosingEventArgs e) { F3.Close();//Form3 窗体关闭指令 } }
测试可以
同理,如何在Form4打开时隐藏Form3?
Form3 F3 = new Form3();//实例化一个Form3的变量 public Form4(Form3 f3)//传入窗体 { InitializeComponent(); F3 = f3;//接收窗体 F3.Visible = false;//Form3 窗体不显示 }
=============================================================
结构函数传值的初步应用——打开唯一窗体
在上面例子中,设置Form4在启动时From3不隐藏,且关闭Form4时不关闭Form3,你会发现,每次点击From3中按钮都会出现一个新的Form4
如何实现打开唯一窗体?
方法:在Form3中设置一个变量 public int count= 0(访问修饰符必须为public才可以跨窗体访问);判断 count 如果为0,则打开新的Form4,然后 count ++;如果 count 不为0,不打开新的Form4。
如果关闭了Form4,此时Form3中的 count 仍不为0,再点按钮是打不开Form4的,也就是说只是实现了只打开一次Form4。
如何实现在关闭Form4时将Form3中的 count 变为0?如果将 count 传入Form4,Form3是无法访问到Form4中的 count 的。
将Form3传值进Form4,在Form4关闭时让 count 变为0。
public partial class Form3 : Form { public int count = 0; public Form3() { InitializeComponent(); } //button1的点击事件 private void button1_Click(object sender, EventArgs e) { if (count == 0) { count++; Form4 f4 = new Form4(this);//创建新的Form4,并将窗体本身传入 f4.Show();//展示Form4 } } }
public partial class Form4 : Form { Form3 F3 = new Form3();//实例化一个Form3的变量 public Form4(Form3 f3)//传入窗体 { InitializeComponent(); F3 = f3;//接收窗体 } //Form4关闭时 private void Form4_FormClosing(object sender, FormClosingEventArgs e) { F3.count--; } }
测试,即可实现打开唯一窗口
以上是关于c#winform如何把另一窗口中的textbox值调用过来的主要内容,如果未能解决你的问题,请参考以下文章
winform中如何在一个窗口中调用另一个窗口的textBox里的Text属性值
C#-WinForm-如何获取文本框(TextBox)中鼠标,光标位置
如何防止在WinForms TextBox中按下alt键引起的哔声?