Почему ShowDialog всегда возвращает DialogResult.Cancel? - PullRequest
6 голосов
/ 01 ноября 2011

У меня есть диалоговое окно winform. На нем у меня есть ярлык, текстовое поле и 2 кнопки (ОК и Отмена). Он также объявляет и определяет перегруженные execute методы для передачи другого списка параметров.

Диалог 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 возвращает обратно вызывающей стороне, он всегда возвращает DialogResult.Cancel, даже когда вы нажимаете OKBtn.

Результат диалога кнопок устанавливается соответственно.

Я установил AcceptButton и CancelButton в winform диалогового окна.

Я не могу понять, почему метод showdialog всегда возвращает DialogResult.Cancel.

ОБНОВЛЕНИЕ После некоторого теста я обнаружил, что мое другое настраиваемое диалоговое окно прекрасно работает при отображении, вызвав showdialog = DialogResult.Ok. Итак, я проверил их обоих, чтобы увидеть, есть ли различия в настройке их свойств, и нет абсолютно никакой разницы. Я не понимаю это Заранее спасибо,

Ответы [ 2 ]

8 голосов
/ 02 ноября 2011

Я разобрался в своей проблеме.Вот почему Форма диалога всегда возвращала Отмена DialogResult.Для моего собственного диалогового окна я также реализовал метод события Form_Closing.По-видимому, у вас не должно быть события, которое выкинет счетчик программы из его шагов при открытии диалога с помощью метода ShowDialog.Таким образом, он был уже закрыт до того, как получил шанс прочитать его DialogResult.Поэтому моя программа видела DialogResult только для моего диалогового окна.

Как только я удалил метод события Form_Closing, он работает так, как он должен.

Вместо того, чтобы удалять вопрос, я отвечаю на него и чувствую, что он поможет другим.

6 голосов
/ 02 ноября 2011

Вы должны установить другое DialogResult - например, установив для свойства DialogResult вашего AcceptButton значение DialogResult.OK.

Или установите его программно, часто в обработчике событий кнопки.

Я думаю, DialogResult.Cancel - это значение по умолчанию, и вы никогда не меняете его.

...