モーダルダイアログの表示およびデータ交換の方法

.NET FrameworkプログラミングTips

Windowsフォームアプリケーションにおいて、 MyDialogという名のフォームを作成し、 Form1からMyDialogをモーダルダイアログとして表示する。 その後、ダイアログからの戻り値を扱う。 最後に、プロパティを使って、MyDialogと呼び出し元との間でデータ交換を行う手法を取り上げる。

ダイアログの表示方法

まず、Windowsフォームアプリケーションのプロジェクトを開始し、MyDialogという名のフォームを新規に追加する。

ここで、MyDialogをモーダルダイアログとして実行するためには、 Form1中のあるイベントハンドラで、

MyDialog* dialog=new MyDialog();
dialog->ShowDialog(this);

と記述すればよい。


モーダルダイアログの結果通知方法

まず、結果を通知する側(サーバ)の設定を行う。 MyDialogの持つDialogResultプロパティに値を書き込むと、 その値を戻り値としてダイアログは終了する仕組みになっている。

例えば、先ほど作成したMyDialogフォームに、 ボタンを二つ(botton1とbotton2)作成し、 botton1をクリックするとOKを返し、 botton2をクリックするとCancelを返すようにする場合、 次のように記述する。

botton1_Clickイベントハンドラ内で、

DialogResult=DialogResult::OK;

botton2_Clickイベントハンドラ内で、

DialogResult=DialogResult::Cancel;

ここで左辺のDialogResultがMyDialogのプロパティとしてのDialogResultである。 右辺のDialogResultはEnum列挙体であって、 Abort, Cancel, Ignore, No, None, OK, Retry, Yes がある。

次に結果を受信する側(クライアント)の記述である。 MyDialog::ShowDialogがDialogResult型の結果を返す。 すなわち、

MyDialog* dialog=new MyDialog();
int result=dialog->ShowDialog(this);
if(result==DialogResult::OK){
  // OKの場合
}else{
  // OKでない場合
}

のような記述となる。

もし、戻り値の種類が多いのであれば、switch文を使い、

MyDialog* dialog=new MyDialog();
switch(dialog->ShowDialog(this)){
case (DialogResult::Abort):
    // Abortの場合
    break;
case (DialogResult::Cancel):
    // Cancelの場合
    break;
・・・
}

などとする。


ダイアログとのデータ交換

MyDialogにMyTextというプロパティを追加し、 このプロパティを通してデータ交換する。

MyDialogにテキストボックスtextBox1を設置し、 ここに表示される文字の設定、および取得をMyTextを使って行うには、 MyDialog内に次のように記述する。

public: 
  __property void set_MyText(String* str){
  	textBox1->Text=str;
    }

    __property String* get_MyText(){
	return textBox1->Text;
    }

これで、MyTextを通じてテキストボックスの文字の設定および取得が可能になる。 具体的には、クライアント側で次のように記述する。

MyDialog* dialog=new MyDialog();
dialog->MyText=S"Multisoft-lab";
if(dialog->ShowDialog(this)==DialogResult::OK){
    MessageBox::Show(dialog->MyText);
}
Copyright © 2004-2006 Multisoft-lab   All rights reserved.