2011-11-01 24 views
5

Tengo un formulario de diálogo hecho a medida. En él tengo una etiqueta, un cuadro de texto y 2 botones (Aceptar y Cancelar). También declara y define sobrecargado ejecutar métodos para pasar diferentes listas de parámetros.¿Por qué ShowDialog siempre devuelve DialogResult.Cancel?

diálogo Winform se llama como sigue:

var theDialog := new InputMsgBox; 

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

diálogo Winform execute se define de la siguiente manera:

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; 

Al ejecutar el método devuelve de nuevo a la persona que llama, que siempre devuelve DialogResult.Cancel incluso cuando haces clic en OKBtn.

El resultado del cuadro de diálogo de los botones se establece en consecuencia.

He configurado AcceptButton y CancelButton en la ventana de diálogo.

No puedo entender por qué el método showdialog siempre devuelve DialogResult.Cancel.

ACTUALIZACIÓN Después de hacer algunas pruebas, descubrí que mi otra ventana de diálogo personalizada funciona bien cuando se muestra al llamar a showdialog = DialogResult.Ok. Entonces, los revisé a los dos para ver si hay algunas diferencias en la configuración de sus propiedades y no hay absolutamente ninguna diferencia. No lo entiendo Gracias de antemano,

Respuesta

8

Descubrí mi problema. Esta es la razón por la cual Dialog Form siempre devolvió Cancel DialogResult. Para mi ventana de diálogo personalizada, también implementé el método de evento Form_Closing. Aparentemente, no debes tener un evento que salte al contador del programa de sus pasos al abrir un diálogo usando el método ShowDialog. Por lo tanto, ya estaba cerrado antes de que tuviera la oportunidad de leer su DialogResult. Por lo tanto, mi programa solo vio el DialogResult predeterminado para mi ventana de diálogo.

Una vez que eliminé el método de evento Form_Closing, está funcionando de la manera que se supone.

En lugar de eliminar la pregunta, la respondo y creo que ayudará a los demás.

5

Debe establecer una diferente DialogResult - por ejemplo, estableciendo la propiedad DialogResult de su AcceptButton-DialogResult.OK.

O configúrelo programáticamente, a menudo en un controlador de eventos de botón.

Imagino DialogResult.Cancel es el valor predeterminado, y nunca lo cambiará.

+0

@ Joe ¿No se supone que uno de los botones configura el formulario DialogResult al hacer clic en él? Tengo el botón OKBtn (AcceptButton) establecido en DialogResult.Ok y el botón CancelarBnn (CancelButton) establecido en DialogResult.Cancel. He pasado por la biblioteca de MSDN y he seguido su ejemplo. Aún así, siempre devuelve DialogResult.Cancel. – ThN

Cuestiones relacionadas