人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

c#でWindowsアプリを作っています。

ファイルのアップロードを作る際に、メイン画面のフォームから子画面を出して「お待ち下さい・・・」みたいな情報を出して、アップロード完了次第、子画面を閉じようとしています。

こんな感じのコードです。

//親画面のフォーム
private void hoge_Click(object sender) {
Child c = new Child();
c.showDialog();
this.uploadFile();
}

ですが、showDialog()をやってしまうと、uploadFile()が全く実行されません。c.showDialog()がモーダルなので、こいつがCloseかDisposeされるまで同期を取るためかと思います。

別に子画面のLoadでuploadFile()を実行すればいいじゃないという話もであるのですが、今後の為にも、親画面から子画面をshowDialog()をさせたあとに、任意の親画面のメソッドを続けて実行させたい場合、どのようにするのがセオリーなのでしょうか?

よろしくお願い致します。

●質問者: ござ先輩
●カテゴリ:コンピュータ
✍キーワード:C# object void Windows アップロード
○ 状態 :終了
└ 回答数 : 4/4件

▽最新の回答へ

1 ● a-kuma3
●35ポイント ベストアンサー

親画面から子画面をshowDialog()をさせたあとに、任意の親画面のメソッドを続けて実行させたい

ShowDialog() ではなく、Show() を使う。


--

(追記)

「今後の為に...」求めていることと合致しているかどうか分かりませんが、

ダイアログから、親画面のクラスが持っているメソッドを呼び出す、という方法は、割とよくやります。

子画面(ダイアログ)が親画面の処理内容を知らなくても良いので、子画面の部品化ができます。


以下のリンク先では、さらに BackgroundWorker を介することで、子画面の表示処理と、

親画面の処理の非同期で動作するようにしています。

BackgroundWorkerクラスを使用して進行状況ダイアログを作成する

時間のかかる処理の進行状況を表示する

◎質問者からの返答

ありがとうございます。

BackGroundWorkerクラスが知りたい情報でした。


2 ● じゅぴたー
●25ポイント

モードレス・ダイアログとしてオープンすればいいでしょう。

Form f= new Form();
f.Show();

Windows フォームをモーダルおよびモードレスで表示する

◎質問者からの返答

ありがとうございます。もうちょい、API読み込みます・・・・。


3 ● SweetSmile1978
●10ポイント

アップロードする処理は新たにスレッドを作成し、

そちらで処理を行わせるようにします。

◎質問者からの返答

ありがとうございます。

そのスレッドの作成のお作法がわからなくて、質問させて貰いました><


4 ● freemann
●30ポイント

Form.Showを使うのであれば、オーナーフォームを使用するといいかと思います。

その時にオーナーフォームのEnabledをfalseに設定しておけば、操作ができなくなるのでポイントとなります。

 private void btnOpen_Click(object sender, EventArgs e)
 {
 this.Enabled = false;
 Form2 frm = new Form2();
 frm.Show(this);
 }


 private void Form2_FormClosing(object sender, FormClosingEventArgs e)
 {
 this.Owner.Enabled = true;
 }

◎質問者からの返答

Enabled=falseは盲点でした!ありがとうございます!

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ