2017-01-19 5 views
1

Я создал кнопку на форме, для которой я задал возвращаемое значение программно, как показано ниже. Во-первых, это psdocode обработчика событий, за которым следует результат возврата диалогового окна.Диалог Результат Установить возвращаемое значение

Существует свойство по умолчанию, в котором можно установить поведение возврата кнопки в пользовательском интерфейсе, то есть поведение диалогового окна. В моем полном коде я не вижу нигде, что эта кнопка возвращается или изменена.

При тестировании (работает в режиме отладки) при первом использовании обработчика события buttonSaveSet_Click во время выполнения кода возвращаемое значение результата диалогового окна является «Отмена», несмотря на то, что я нажал кнопку «Установить». Однако во второй раз, когда я выполняю функцию, нажав ту же кнопку, результат диалога возвращается как «Да».

Похоже, есть другое место, в котором изменяется диалоговое окно, и я устанавливаю это значение в неправильном месте.

psudo code 
    private void buttonSaveSet_Click(object sender , EventArgs e) 
    { 
     setChars = new setChars(); 
     //set the dr to yes. 
     buttonSaveSet.DialogResult = DialogResult.Yes; 

     // set the charCount 
     // set the rowCount 

     if (conditional statement is true) 
     { 
      //return values; 
     } 

     else 
     { 
      //return nothing; 
     } 
     Close(); 
    } 

Расположение возвращаемой:

   try 
     { 
      DialogResult dResult = setValPopup.ShowDialog(); 
      SetChars sc = setValPopup.setChars; 
      int max; 

      if (dResult == DialogResult.Yes) 
      { 
       if (sc.set == true) 
       { 
        //do other work 
       } 
      } 
     } 
+0

Кнопки DialogResult копируются в форму.DialogResult до того, как OnClick выполняется не после. Изменение его в событии перед закрытием формы происходит в конце. Попробуйте установить форму.DialogResult не button.DialogResult. – Ralf

ответ

0

Вы должны установить свойство DialogResult формы для выхода. Любое значение, но DialogResult.None заставит форму закрыть и вернуть то, что вы установили в качестве DialogResult (по форме, а не на кнопке)

private void buttonSaveSet_Click(object sender , EventArgs e) 
{ 
    setChars = new setChars(); 
    this.DialogResult = DialogResult.Yes; 
    .... 
    // No need to call Close here 
    // Close(); 
} 

поведение вы наблюдаете это связано с тем, что, вероятно, вид двигателя проверяет свойство DialogResult кнопки перед входом в событие клика, и ожидается, что он не переоценит его снова при выходе из события. Таким образом, ваш первый клик устанавливает свойство на кнопке, при втором щелчке свойство на кнопке отмечено механизмом формы, и все закрывается.

+0

Стив, это и было. Спасибо вам за помощь. Я закончил удаление метода close(), и возвращаемый результат - «Да», как я и ожидал. Это одна вещь, о которой я подозревал, закрытие формы перед изменением стоимости было записано, но я не придавал ей особого значения. – WholeMilk32

0

на основе поведения вы decribing. Вероятно, вы установили свойство DialogResult на свой конструктор, поэтому в первый раз, когда он выполняется, он запускает любое значение, установленное в дизайнере, и в следующих исполнениях оно выполняется корректно, как вы ожидаете.

Посмотрите на своего дизайнера, и вы найдете проблему.

+0

Это то, что я изначально думал тоже. Я посмотрел в дизайнере, я не нашел ничего, что могло бы изменить результат. Когда я использовал пользовательский интерфейс для установки возвращаемого значения, добавлена ​​строка кода «this.buttonSaveSet.DialogResult = System.Windows.Forms.DialogResult.Yes;» что изменило результат диалога. Может, это ты и имел в виду? Спасибо за ответ, хотя! Я ценю помощь. – WholeMilk32