6

カスタムメイドのダイアログウィンフォームがあります。その上に、ラベル、テキストボックス、2 つのボタン (OK とキャンセル) があります。また、異なるパラメーター リストを渡すためのオーバーロードされた実行メソッドを宣言および定義します。

ダイアログ Winform は次のように呼び出されます。

var theDialog := new InputMsgBox;

if theInputB.Execute('Awesome StackOverflow','Enter Text?',s,var s) = DialogResult.OK then
begin
  Invalidate;
  SetText(s);
end;

ダイアログ Winform の実行は次のように定義されます。

method InputMsgBox.Execute(Title, theMessage, defaultanswer:string;var thevalue:string): DialogResult;
begin
    result := DialogResult.Cancel;

    Requesttext.Text:=themessage;
    Requesttext.Enabled:=true;
    Requesttext.Visible:=true;
    InputTextBox.Text:=defaultanswer;
    InputTextBox.Enabled:=true;
    InputTextBox.Visible:=true;

    CancelBtn.Enabled:=true;
    CancelBtn.Visible:=true;
    Okbtn.Enabled:=true;
    Okbtn.Visible:=true;

    self.ShowDialog;
    Result := self.DialogResult;
    thevalue:=InputTextBox.Text;
end;

execute メソッドが呼び出し元に戻ると、OKBtn をクリックしても常に DialogResult.Cancel が返されます。

ボタンのダイアログの結果は、それに応じて設定されます。

ダイアログの winform に AcceptButton と CancelButton を設定しました。

showdialog メソッドが常に DialogResult.Cancel を返す理由がわかりません。

更新いくつかのテストを行った後、showdialog = DialogResult.Ok を呼び出して表示すると、他のカスタムメイドのダイアログ ウィンドウが正常に動作することがわかりました。そのため、両方のプロパティ設定に違いがあるかどうかを確認しましたが、まったく違いはありません。わかりません。前もって感謝します、

4

2 に答える 2

9

私は自分の問題を理解しました。これが、Dialog Form が常に Cancel DialogResult を返す理由です。カスタムメイドのダイアログ ウィンドウには、Form_Closing イベント メソッドも実装しました。どうやら、ShowDialog メソッドを使用してダイアログを開くときに、プログラム カウンターをそのステップからジャンプさせるイベントはありません。そのため、DialogResult を読み取る機会を得る前に、すでに閉じられていました。したがって、私のプログラムは、ダイアログ ウィンドウのデフォルトの DialogResult しか表示しませんでした。

Form_Closing イベント メソッドを削除すると、想定どおりに動作しています。

質問を削除する代わりに、私はそれに答えており、他の人の助けになると感じています.

于 2011-11-02T14:58:52.923 に答える
6

別のものを設定する必要がありますDialogResult-たとえば、のDialogResultプロパティをに設定AcceptButtonしますDialogResult.OK

または、多くの場合、ボタン イベント ハンドラーでプログラムによって設定します。

DialogResult.Cancelがデフォルトだと思いますが、変更することはありません。

于 2011-11-01T20:50:23.043 に答える