2012-03-26 130 views
-2

可能重复:
How to Pass String to another forms from one form in c#传递String与另一个形式从一种形式在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(); 
    } 
} 

这里首页被form3这主要形式打开childform。主窗体本身的加载事件。

+0

你永远不会从表1,打开表2他们不以任何方式 “交谈”。你在哪里打开表格2? – 2012-03-26 12:55:23

+0

@ Fire-Dragon-DoL-form 2已经开放,这是主要的形式。 – 2012-03-26 13:00:18

+0

没有窗体2是NT已经打开..我编辑n更正的问题..看一看 – 2012-03-26 13:01:26

回答

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; 
} 
+0

你必须设置home.username的可见性,以便公众可以工作 – BlackBear 2012-03-26 12:59:16

+0

home.username的可见性已经设置为public(在登录类中) – Ove 2012-03-26 13:01:19

+0

是的,没有注意到它) – BlackBear 2012-03-26 13:02:02

3

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

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

+0

嘿,我dint得到前一个,所以我想共享代码以及... – 2012-03-26 12:53:05

+0

我应该真的在另一个线程中分享它。 “出事了。”你什么意思?什么是错误?与其声明一个名为home的表单,你应该声明一个登录名(还要考虑与大写字母相关的命名),然后从该登录表单中提取用户名字符串。 – 2012-03-26 12:53:48

+0

错误是价值没有得到通过使用上面的方法..我想知道我在做错什么..好心帮助相同 – 2012-03-26 12:56:35

0

林不知道,你打电话给你的登录类。 但是,您可以传递主窗体的实例并从那里设置值。

public login(main mainInstance) 
{ 
    //... login etc. 

    mainInstance.UserName = comboBox1.Text; 
} 

或者让登录方法返回一个用户对象或字符串。

+0

你可以upvote我的问题..我无法提出新的问题,因为它..在此先感谢... – 2012-11-02 12:19:10

0

我不能发布此作为注释,否则便无法读取,但除非是我弄错了:

Form home = new home() 

甚至不会编译考虑到只有两班是mainlogin

虽然你可以更正代码和声明的形式正确的方式

login home = new login(); 

它似乎更容易只是使用在这种情况下变量。

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

相关问题