1

私は wxDialog の独自のサブクラスを作成していますが、次のようにモードレス ダイアログとして使用するとうまく機能します。

AddDialog newAddDialog = new AddDialog(this, wxID_ANY, _T("Dialog Title"), wxDefaultPosition, wxDefaultSize, 0);
if (newAddDialog.ShowModal() == wxID_OK)
{
//do something
}

ShowModal() を使用すると、OK またはキャンセルが押されるまでプログラムのフローが停止します。ダイアログを表示する必要がありますが、GUI の流れを止めないでください。

AddDialog newAddDialog = new AddDialog(this, wxID_ANY, _T("Dialog Title"), wxDefaultPosition, wxDefaultSize, 0);
if (newAddDialog.Showl() == wxID_OK)
{
//do something
}

Show() を使用すると、ダイアログが一時的に表示されてから消えます。スコープの問題かもしれないと思ったので、newAddDialog のポインターを使用しました。その後、ダイアログが表示され、[OK] または [キャンセル] をクリックするとダイアログが閉じますが、[OK] をクリックしても if ステートメントのコードが実行されません。

誰も続行方法を知っていますか?ありがとう。


さらなる解明:

別のクラスでオーバーライドする Dialog サブクラスに仮想 void 関数があります。オーバーライドするとイベントが機能しないように見えますが、実際の Dialog サブクラスに void があると、イベント呼び出しが発生します。これはオーバーライドの問題のようですが、何が問題になるのかわかりません。これは、OnInit() 呼び出しで呼び出しているメインの GUI ではありません。問題になる可能性はありますか?

4

2 に答える 2

0
AddDialog newAddDialog = new AddDialog(...

これはコンパイルされますか?本当に?

'new'演算子はvoidへのポインタを返すため、投稿したコードは実際には非常に奇妙に見えます。

これを行う通常の方法は次のとおりです。

AddDialog * newAddDialog = (AddDialog *) new AddDialog( ...

または

AddDialog newAddDialog( ...  
于 2012-12-20T02:32:21.633 に答える
0

ShowModalプログラムの実行をブロックし、結果を返します (wxID_OK など)。一方、Showダイアログを表示してすぐに戻るだけなので、戻り値から結果 (ユーザーがボタンを押したもの) を確認することはできません。代わりに、ダイアログ内からイベントを送信するなどして、そのダイアログ ボックスの結果を伝える必要があります。

于 2012-12-19T21:27:30.213 に答える