2015-12-21 86 views
0

我正在開發一個使用C#的窗體窗體應用程序,我試圖從一個窗體傳遞一個字符串到另一個窗體。我的字符串似乎進入第二種形式,但是,當我嘗試在第二種形式中將該字符串顯示爲標籤時,它不顯示該字符串。但是,當我嘗試在第二個窗體的消息框中顯示它時,它會在消息框內顯示傳遞的字符串。如何更改我的代碼,以便我可以使用傳遞的字符串在第二個表單中顯示爲標籤?在兩個窗體之間傳遞字符串時出錯

這是我的代碼:

我的Form1有,

private void Report_Bug_Click(object sender, EventArgs e) 
    { 
     ReportForm newForm = new ReportForm(); 
     string myString = "Hello World!";// string to be passed 
     newForm.AuthUser = myString; //sending the string to the second form 
     newForm.Show(); 
    } 

我的窗口2(Reportform)包含,

public partial class ReportForm : Form 
{ 
    public string AuthUser { get ; set; } //retrieving passed data 

    public ReportForm() 
    { 
     InitializeComponent(); 
     populateListBox(); 
     userlabel.Text = AuthUser; //setting the label value to "Hello World!" - This doesn't work 
    } 

    private void Report_Submit(object sender, EventArgs e) 
    { 
     MessageBox.Show(AuthUser);// This displays a message box which says "Hello World!" so the string is passed 
    } 
} 

我怎樣才能更改我的代碼,所以它的標籤「userlabel」會顯示我從我的第一個表單傳遞的字符串?

回答

1

ReportForm上的構造函數在之前執行您在Report_Bug_Click中設置AuthUser屬性。

public ReportForm() {} 

public ReportForm(string authUser) 
{ 
    this.AuthUser = authUser 
    InitializeComponent(); 
    populateListBox(); 
    userlabel.Text = this.AuthUser; 
} 

在你Form1中傳遞在構造函數的字符串:您可以通過直接傳遞字符串到重載的構造函數解決這個

private void Report_Bug_Click(object sender, EventArgs e) 
{ 
    ReportForm newForm = new ReportForm("Hello World!"); 
    newForm.Show(); 
} 
+0

非常感謝。這工作完美。它甚至允許我使用Reportform()之外的字符串。再一次,非常感謝你:) – user5679217

3

在設置AuthUser屬性之前,您在表單中設置標籤文本。您可以讓ReportForm構造函數接受字符串。

public ReportForm(string labelText) 
    { 
     InitializeComponent(); 
     populateListBox(); 
     userlabel.Text = labelText; 
    } 

在這裏,我假設你並不真的需要爲AuthUser了。

+0

能否請您進一步解釋你的答案有點 – user5679217

+0

ReportForm(是你的構造函數,你設置的標籤。當您調用新的ReportForm時,會調用並設置標籤。之後,您將設置AuthUser屬性。 –

+0

如何更改我的代碼,使其不存在此衝突 – user5679217

1

userlabel.Text = AuthUser;不應該在ReportForm()方法你的第二種形式。它是你的類的構造函數,並在將myString分配給newForm.AuthUser之前執行。最簡單的做法是將userlabel.Text = AuthUser;放入類似Form_Load()的事件處理程序中。您還可以更改構造函數以接收該字符串作爲參數並將其顯示在標籤中。

1

或者,用安迪的建議,把這個字符串作爲參數構造函數:)

string myString = "Hello World!";// string to be passed 
    ReportForm newForm = new ReportForm(myString); 


public ReportForm(string text) 
{ 
    InitializeComponent(); 
    populateListBox(); 
    userlabel.Text = text; 
} 
+0

非常感謝,它的工作 – user5679217

相關問題