2012-03-26 110 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);

相關問題