前言
最近博主在做项目的时候遇到需要实现A窗体刷新B窗体的功能,比如从A窗体中点击登录按钮弹出B窗体的登录界面,如果用户登录成功则自动关闭B窗体,A窗体显示用户昵称;当用户关闭登录界面时,什么都不改变。
效果流程
- 在A窗体中当用户点击登录,弹出B窗体登录界面,如果登录成功,则把A窗体用户名改成用户在B窗体输入的用户名
- 用户输入账户后,把账户传到A窗体中
解决方案
实现窗体间的传值
重载A窗体中的构造方法,并定义一个string类型的全局变量,注意:必须加static关键字,否则不能传值
1
2
3
4
5
6
7
8
9
10
11
12
13
14
//系统自动生成的构造函数
public Form1()
{
InitializeComponent();
}
//定义一个string类型的全局变量
private static string UserName = "";
//重载构造函数,设置一个string类型的形参,用来接收从B窗体传来的值
public Form1(string str)
{
//把传过来的参数赋值给UserName
UserName = str;
}在A窗体中定义一个方法,把要刷新的部分写到这个方法里面
1
2
3
4
5public void ShuaXin()
{
//吧用户名标签文本改成用户传过来的值
label1.Text = UserName;
}在A窗体里点击触发B窗体的按钮里的代码如下
1
2
3
4
5
6private void button1_Click(object sender, EventArgs e)
{
Login login = new Login();
login.Owner = this;
login.Show();
}在B窗体登录按钮单击事件的代码如下
1
2
3
4
5
6
7private void button1_Click(object sender, EventArgs e)
{
Form1 form1 = new Form1(textBox1.Text);//把用户输入的账户传到我们刚刚设置好的构造函数里
form1 = (Form1)Owner;
form1.ShuaXin();
Close();
}
这样就可以实现我们的功能啦。