将字符串从c#中的一个表单传递到另一个表单
本文关键字:表单 一个 另一个 字符串 | 更新日期: 2023-09-27 18:29:05
可能重复:
如何在c#中将字符串从一个表单传递到另一个表单
C#查询:当我登录到我的软件时,我使用组合框选择所需的用户名。登录后,我想在toolstrip的主窗口中看到用户名文本。
我尝试了获取和设置方法,但出了问题。你能帮帮我吗?提前谢谢。
表格1:
public partial class login : Form
{
public login()
{
InitializeComponent();
}
public string username
{
get{
return a.ToString();}
}
public string a;
private void button1_Click(object sender, EventArgs e)
{
a = comboBox1.Text;
Form main1 = new main();
main1.Show();
// rest is the code for login.
}
}
表格2:
public partial class main : Form
{
public main()
{
InitializeComponent();
}
public string username
{
set { toolStripLabel1.Text = value; }
}
private void main_Load(object sender, EventArgs e)
{
Form home = new home();
home.MdiParent = this;
home.WindowState = FormWindowState.Maximized;
home.Show();
}
}
这里Home是form3,一个在主窗体本身的加载事件中以主窗体打开的子窗体。
几分钟前有人刚刚为您回答了这个问题!?据我所知,这是一个非常合适的答案,那么你为什么不直接实施呢?
https://stackoverflow.com/a/9872043/1017882
将main_Load代码替换为:
private void main_Load(object sender, EventArgs e)
{
login home = new login();
home.MdiParent = this;
home.WindowState = FormWindowState.Maximized;
home.ShowDialog(); // waits for the home form to be closed
this.username = home.username;
}
我不确定您在哪里调用登录类。但是您可以传递主窗体的一个实例,并从中设置值。
public login(main mainInstance)
{
//... login etc.
mainInstance.UserName = comboBox1.Text;
}
或者让登录方法返回用户对象或字符串。
我不能把它作为评论发布,否则它将无法阅读,但除非我错了:
Form home = new home()
考虑到只有两个类是main
和login
,甚至不会编译
虽然你可以更正代码并以正确的方式声明表单
login home = new login();
在这种情况下,只使用static
变量似乎更容易。
我认为最好的方法是使用事件:
表格1:
public partial class login : Form
{
public delegate void sendStringDelegate(string s);
public event sendStringDelegate sendString;
public login()
{
InitializeComponent();
}
public string username
{
get{
return a.ToString();}
}
public string a;
private void button1_Click(object sender, EventArgs e)
{
a = comboBox1.Text;
sendString(a);
// rest is the code for login.
}
}
表格2:
public partial class main : Form
{
login log = new login();
public main()
{
InitializeComponent();
log.sendString += new login.sendStringDelegate(setString);
}
public void setString(string s)
{
whatever.text = s;
}
public string username
{
set { toolStripLabel1.Text = value; }
}
private void main_Load(object sender, EventArgs e)
{
Form home = new home();
home.MdiParent = this;
home.WindowState = FormWindowState.Maximized;
home.Show();
}
}
代码没有经过测试,因此可能存在一些错误
也可以使用静态事件:
变更public event sendStringDelegate sendString;
到public static event sendStringDelegate sendString;
删除login log = new login();
变更log.sendString += new login.sendStringDelegate(setString);
到login.sendString += new login.sendStringDelegate(setString);