将字符串从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,一个在主窗体本身的加载事件中以主窗体打开的子窗体。

将字符串从c#中的一个表单传递到另一个表单

几分钟前有人刚刚为您回答了这个问题!?据我所知,这是一个非常合适的答案,那么你为什么不直接实施呢?

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()

考虑到只有两个类是mainlogin ,甚至不会编译

虽然你可以更正代码并以正确的方式声明表单

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);