1

Windows アプリケーションで 2 つのフォームを作成しました。

一方のフォームはフォームとして機能し、もう一方のフォームはモーダル ダイアログ ボックスとして機能します。

フォーム ダイアログ ボックスには、ボタンと 1 つのテキスト ボックスが含まれています。このボタンをクリックすると、MODAL DIALOGBOX が表示されます。このダイアログ ボックスには、1 つのテキスト ボックスと 2 つのボタン ([OK] と [キャンセル]) も含まれています。

このダイアログ ボックスが表示されると、ダイアログ ボックスの TextBox には、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;
}

MODAL DIALOGBOX OK ボタンのコード:

[キャンセル] ボタンは、[OK] ボタンをクリックした場合にのみ有効になることに注意してください。

コーディング:

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

私が直面している問題は、ユーザーがユーザー名テキストボックスに入力した値が、モーダルダイアログボックスのテキストボックスに表示されないことです。代わりに、テキストボックスを空として表示しています。

このモーダル ダイアログ ボックスのテキスト ボックスにユーザーが入力した値を取得するにはどうすればよいですか?

希望のタスクを実行する際に誰か助けてもらえますか?

前もって感謝します!!!

4

5 に答える 5

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 に依存しません。つまり、ユーザー名の表示方法の内部動作を自由に変更できます。たとえば、それをラベルに変更しても、消費者のコードを壊すことはありません! コンシューマーが知る必要があるのは、ユーザー名をコンストラクターに渡す必要があるということだけです。

于 2009-07-03T11:24:02.803 に答える
2

変化する:

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

に:

objFnC.txtUserName.Text = UserName
objFnC.ShowDialog();
于 2009-07-03T11:34:18.817 に答える
1

モーダル フォームのテキスト ボックスの内容を設定 (および取得) できるようにするには、次のコードをそのフォームに追加します。

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

次に、別のフォームでユーザー名を設定できます。

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

また、モーダル ダイアログ フォームの [OK] ボタンと [キャンセル] ボタンの関係についてお聞きする必要があります。[キャンセル] ボタンを有効にするためにユーザーが最初に [OK] をクリックし、次に [キャンセル] をクリックして実際にフォームを閉じる必要があるのは少し奇妙に思えます。

これらのボタンのクリック イベントのイベント ハンドラーを持たず、代わりにそれらのDialogResultプロパティの適切な値を設定してから、モーダル フォームのAcceptButtonおよびCancelButtonプロパティを設定することをお勧めします。そうすれば、ダイアログがどのように閉じられたかを確認できます。

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
}
于 2009-07-03T11:24:44.177 に答える
1

を呼び出す前に、ダイアログでテキスト フィールドを設定しますShowDialog

private void btnFn_Click(object sender, EventArgs e)
{
  UserName = txtUserName.Text;
  frmFnC objFnC = new frmFnC();
  objFnC.txtUserName.Text = UserName;
  objFnC.ShowDialog();
}
于 2009-07-03T11:25:14.190 に答える
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();
}

または、後でダイアログを強制的に再描画します。

于 2009-07-03T11:26:04.297 に答える