2016-07-27 5 views
0

ボタンをクリックすると、進捗フォームが表示され、タスクが開始されます。私はボタンを無効にするか、進行状況がモーダルになるようにして、進行状況が完了するまでメインフォーム上で何もクリックできないようにします。プログレスバーは、メインウィンドウのボタンをクリックするように制限する必要があります

私はプログレスバーのフォームのShowDialogを呼び出すときに引数として所有者の参照を渡してみました:

m_oProgressBarForm = new ProgressBarForm(); 
m_oProgressBarForm.ShowDialog(this); 

私はボタンがない、メインウィンドウをグレーアウトたりすることによって、再度ボタンをクリックするようユーザーを防ぐことができますどのように助けてくださいをクリックするか、進行状況バーウィンドウをモーダルにしますか?

現在、ユーザーはボタンをもう一度クリックして別のインスタンスを起動し、アプリケーションを使用できなくし、タスクマネージャを使用して手動でアプリケーションを強制終了する必要があります。

+2

コンテキストのコードを追加する必要があるかもしれません。 – Brandon

+0

進行状況フォームはモーダルのように見えます。なぜあなたがそうではないと言うのかはわかりません。 – LarsTech

+0

はい、それは目的に合っていません。この問題を解決する方法を提案できますか? – PSDebugger

答えて

0

ShowDialog()を使用してフォームを表示すると、それに続くコードはダイアログボックスが閉じられるまで実行されません。しかし、おそらくプログレスバーフォームを表示し、いくつかの操作を実行してからフォームを閉じる必要があります。進捗フォームをモーダルとして表示することはできません。

代わりに、あなたのメインフォームを無効にすることができますし、あなたの進捗状況のフォームは、時間のかかるタスクを実行し、最後に、その後、その親としてメインフォームを設定することで示し進捗フォームを閉じて、メインフォーム有効:

private async void Button1_Click(object sender, EventArgs e) 
{ 
    var f = new Form(); //Your progress form 
    f.Show(this); 
    this.Enabled = false; 
    try 
    { 
     //For example a time-consuming task 
     await Task.Delay(5000); 
    } 
    catch (Exception ex) 
    { 
     //Handle probable exceltions 
    } 
    f.Close(); 
    this.Enabled = true; 
    this.BringToFront(); 
} 
関連する問題