可能重复:
How to Pass String to another forms from one form in c#
C#查询:当我登录我的软件时,我使用组合框选择所需的用户名。登录后,我想在工具栏的主窗口中看到用户名文本。
我尝试了get和set方法,但出了点问题。你能帮帮我吗?提前谢谢。
表格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一个以Main形式打开的子表单。在主表单本身的加载事件中。
答案 0 :(得分:3)
有人刚刚在几分钟前回答了这个问题!?据我所知,这是一个非常恰当的答案,那你为什么不实施呢?
答案 1 :(得分:1)
将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;
}
答案 2 :(得分:0)
我不确定你在哪里打电话给你的登录课程。 但是你可以传递主表单的实例并从那里设置值。
public login(main mainInstance)
{
//... login etc.
mainInstance.UserName = comboBox1.Text;
}
或让login方法返回用户对象或字符串。
答案 3 :(得分:0)
我不能将此作为评论发布,否则将无法阅读,但除非我弄错了:
Form home = new home()
考虑到只有两个类main
和login
虽然您可以更正代码并以正确的方式声明表单
login home = new login();
在这种情况下使用static
变量似乎更容易。
答案 4 :(得分:0)
我认为最好的方法是使用事件:
Form1中:
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);