2015-09-22 3 views
0

У меня есть метод Windows Forms, который вызывается:окна форма и подчиненная рутина

// fire up the form 
ViewportRenumberingForm form = new ViewportRenumberingForm(pickedRef, doc); 
form.ShowDialog(); 

Тогда внутри этой формы у меня есть рутина, которая получает запуск:

private void btnOK_Click(object sender, EventArgs e) 
    { 
     renumberViewports(); 
    } 

теперь, если во время выполнения renumberViewports() он сталкивается с определенным условием. Я прошу его инициировать дополнительную форму, чтобы получить пользовательский ввод о том, как действовать:

if (openAdditionalForm) 
{ 
    ViewportRenumberingForm2 subForm = new ViewportRenumberingForm2(); 
    var result = subForm.ShowDialog(); 
    if (result == DialogResult.OK) 
    { 
     // get all values preserved after close 
     bool selected = subForm.ReturnSelected; 
     bool unselected = subForm.ReturnUnselected; 

     if (selected) 
     { 
      //do something 
     } 
     if (unselected) 
     { 
      //do something 
     } 
    } 
    else if (result == DialogResult.Cancel) 
    { 
     this.Show(); 
    } 
} 

Теперь возникает вопрос: когда пользователь нажимает «Отмена», я хочу вернуться к своей основной форме и начать сначала. Это означает, что пользователь может повторно ввести любую информацию и нажать, что btnOK_Click() и renumberViewports() снова будут исполнены. В основном я хочу, чтобы пользователь мог просто признать, что их текущий вход вызовет ошибку, покажите им, что в подзаголовке разрешить им отменять повторное ввод входов. Затем я хочу повторно выполнить его и закрыть форму, если ошибок нет.

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

Любая помощь будет оценена по достоинству.

+1

Это должна быть ошибка компиляции, 'result' не определен, где' else if' может ее видеть. –

+0

Я исправил это. я просто поспешно копировал части кода и неправильно фиксировал некоторые скобки. моя вина. – konrad

+0

Скажите, пожалуйста, каково значение свойства DialogResult из btnOK и каковы значения свойств AcceptButton и CancelButton в форме, где определен btnOK. – Steve

ответ

0

Если я понимаю, что вы пытаетесь сделать, в методе renumberViewports(), измените DialogResult.Cancel условный блок к этому:

else if (result == DialogResult.Cancel) 
{ 
    // this will close this form and set the result to 'Cancel' 
    this.DialogResult = DialogResult.Cancel; 
} 

Тогда в вас основной форме, а не просто:

ViewportRenumberingForm form = new ViewportRenumberingForm(pickedRef, doc); 
form.ShowDialog(); 

... Я бы поменял это на петлю, которая сохраняет повторное открытие формы ViewportRenumberingForm, пока результат не будет Cancel:

DialogResult result = DialogResult.Cancel; 
while (result == DialogResult.Cancel) 
{ 
    ViewportRenumberingForm form = new ViewportRenumberingForm(pickedRef, doc); 
    result = form.ShowDialog(); 
} 
+0

это работает спасибо! – konrad

Смежные вопросы