2009-07-03 144 views
1

我在Windows應用程序中創建了兩個窗體。模態對話框

一個表單充當一個表單,另一個表單充當一個MODAL對話框。

表單對話框包含一個按鈕和一個文本框。 單擊此按鈕時,應顯示MODAL DIALOGBOX。 此對話框還包含一個文本框和兩個按鈕(確定並取消)。

現在,當顯示此對話框時,對話框的文本框應包含在Form1的文本框中輸入的值。

我已經使用了以下編碼來完成這項任務。 Form1的編碼:

public string UserName; 
private void btnFn_Click(object sender, EventArgs e) 
{ 
    UserName = txtUserName.Text; 
    frmFnC objFnC = new frmFnC(); 
    objFnC.ShowDialog(); 
    objFnC.txtUserName.Text = UserName; 
} 

代碼模態對話框OK按鈕:

請注意,取消按鈕被點擊確定按鈕時纔會啓用。

編碼:

private void btnOk_Click(object sender, EventArgs e) 
{ 
    btnCancel.Enabled=true; 
} 
private void btnCancel_Click(object sender,EventArgs e) 
{ 
    this.Close(); 
} 

我現在面臨的問題是在模式對話框文本框不顯示在用戶名文本框中輸入用戶輸入的值。相反,它將文本框顯示爲空白。

我該怎麼做才能將用戶在文本框中輸入的值輸入到該模式對話框中?

任何人都可以幫助我執行所需的任務嗎?

在此先感謝!

回答

2

變化:

objFnC.ShowDialog(); 
objFnC.txtUserName.Text = UserName 

要:

objFnC.txtUserName.Text = UserName 
objFnC.ShowDialog(); 
6

您得到的問題是您在設置用戶名之前顯示對話框。

//this shows your dialog 
objFnC.ShowDialog(); 
//this won't happen until the dialog is closed 
objFnC.txtUserName.Text = UserName; 

因爲對話框是模態的,所以在對話框關閉之前它不會進入下一行。你想交換這些線路,它會沒事的。

//do this first 
objFnC.txtUserName.Text = UserName; 
//then show your dialog 
objFnC.ShowDialog(); 

我想指出公開曝光文本框不是一個真正的好主意,但。您不希望消費者具有對話的實用知識。

如果向窗體構造函數添加一個參數,然後在其中設置文本框文本會更好。然後,你可以做到以下幾點:

//get the username 
string userName = txtUserName.Text; 
//create a new form passing in the username 
frmFnC objFnC = new frmFnC(userName); 
//display the form 
objFnC.ShowDialog(); 

這樣一來,消費者並不是依靠有一個名爲txtUserName文本框,這意味着你可以自由地改變你的顯示的用戶名的內部運作frmFnC。例如,您可以將其更改爲標籤,並且不會破壞消費者的代碼!所有消費者需要知道的是,他們應該將一個用戶名傳遞給構造函數。

+0

感謝您的及時,因爲我期望它現在的工作! – sheetal 2009-07-03 11:35:10

1

爲了能夠設置(和獲取)的模式窗體的文本框的內容,該代碼添加到窗體:

public string UserName 
{ 
    get { return txtUserName.Text; } 
    set { txtUserName.Text = value; } 
} 

然後,在其他形式的,你可以設置用戶名:

frmFnC objFnC = new frmFnC(); 
objFnC.UserName = txtUserName.Text; 
objFnC.ShowDialog(); 

我也需要問你一下模式對話框中OK和Cancel按鈕之間的關係;它似乎有點奇怪,用戶需要先點擊確定,才能啓用「取消」按鈕,然後單擊「取消」以實際關閉表單。

我會建議沒有任何事件處理程序的這些按鈕的點擊事件,而是設置其DialogResult屬性的適當值,然後設置模態窗體的AcceptButtonCancelButton屬性。這樣,你可以檢查對話框是如何關閉:

frmFnC objFnC = new frmFnC(); 
objFnC.UserName = txtUserName.Text; 
if (objFnC.ShowDialog() == DialogResult.OK) 
{ 
    // the user clicked the OK button 
} 
else 
{ 
    // the user clicked the Cancel button 
} 
+0

感謝您的提示,它現在正在按照我的需要工作! – sheetal 2009-07-03 11:31:40

1

坐落在對話文本字段調用ShowDialog前:

private void btnFn_Click(object sender, EventArgs e) 
{ 
    UserName = txtUserName.Text; 
    frmFnC objFnC = new frmFnC(); 
    objFnC.txtUserName.Text = UserName; 
    objFnC.ShowDialog(); 
} 
+0

非常感謝它,現在正在按照我的意願開展工作! – sheetal 2009-07-03 11:29:23

1

您需要交換文本和的ShowDialog的設置:

public string UserName; 
private void btnFn_Click(object sender, EventArgs e) 
{ 
    UserName = txtUserName.Text; 
    frmFnC objFnC = new frmFnC(); 
    objFnC.txtUserName.Text = UserName; // SET THE DATA BEFORE SHOWING THE DIALOG 
    objFnC.ShowDialog(); 
} 

或之後強制重畫對話框。