dポイントプレゼントキャンペーン実施中!

プログレスバーで進行状況を表示する処理を入れています。
http://dobon.net/vb/dotnet/programing/progressdi …

上記のサイトをパクってとりあえず作ってみました。きちんとできているのですが
1つだけ問題があって

try
{
ProgressDialog pd = new ProgressDialog();
//ダイアログのタイトルを設定
pd.Title = "カウントアップ";
//プログレスバーの最小値を設定
pd.Minimum = 0;
//プログレスバーの最大値を設定
pd.Maximum = 10;
//プログレスバーの初期値を設定
pd.Value = 0;

//進行状況ダイアログを表示する
pd.Show(this);

//処理を開始
for (int i = 1; i <= 10; i++)
{
//プログレスバーの値を変更する
pd.Value = i;
//メッセージを変更する
pd.Message = i.ToString() + "番目を処理中...";

//キャンセルされた時はループを抜ける
if (pd.Canceled)
break;

//1秒間待機する(本来なら何らかの処理を行う)
System.Threading.Thread.Sleep(1000);
}

//ダイアログを閉じる
pd.Close();
}
catch
{
MessageBox.Show("error");
}

こんな感じで使い、プログレスバー表示中に例外が走るとMessageBoxがモーダレスで
表示されてしまいます。プログレスバー表示前だとモーダルのままです。

色々調べたところ原因は裏でスレッドが走っているからだと思います。たぶん・・
ところが対処法となると少々困っています。モーダルでMessageBoxを表示させたいのですが
どうすればよいのでしょうか?教えてください。

A 回答 (3件)

第一引数で親ウィンドウのオブジェクトを指定できるメソッドを使って


MessageBox.Show(this, "error");
とか。
    • good
    • 0
この回答へのお礼

ありがとうございました。わかりやすかったです。

お礼日時:2012/03/05 17:06

プログレスバーのフォーム ( ProgressForm ) に対してモーダルにするなら、



class ProgressDialog に

public ProgressForm Form
{
get
{
return form;
}
}

を追加

ProgressDialog を呼び出す側の Form に

delegate void ShowMessageBoxDelegate();

void ShowMessageBox()
{
MessageBox.Show("error");
}

を追加

ProgressDialog pd = new ProgressDialog();

を try の前に出して

ProgressDialog pd = new ProgressDialog();
try
{
・・・
}

とし、

catch
{
ShowMessageBoxDelegate smb = new ShowMessageBoxDelegate(ShowMessageBox);
pd.Form.Invoke(smb);
pd.Close();
}

のようにすればいいと思います。
    • good
    • 0
この回答へのお礼

ありがとうございました。

お礼日時:2012/03/05 17:06

こんばんは。



vbSystemModal
とかね・・・。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!