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

时间:2012-03-26 12:49:34

标签: c#

  

可能重复:
  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形式打开的子表单。在主表单本身的加载事件中。

5 个答案:

答案 0 :(得分:3)

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

https://stackoverflow.com/a/9872043/1017882

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

考虑到只有两个类mainlogin

,甚至不会编译

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

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