Pregunta

He creado un control de usuario en mi aplicación que tiene un cuadro de texto y luego 2 botones en él. Un botón es agregar datos al DB desde el cuadro de texto y el segundo cancela la acción. Luego, este control del usuario se agrega a múltiples diálogo (formularios), pero quiero que los botones activen los mismos eventos, por la cual coloqué los botones en el control del usuario y no el cuadro de diálogo.

Lo que estoy tratando de hacer es después de hacer clic en el botón Agregar datos y es exitoso, quiero que cierre el diálogo en el que se encuentra el control.

EDITAR:

No sé cómo codificar esto para cerrar el cuadro de diálogo cuando se desencadena desde un control de usuario. No sé por dónde empezar porque no he usado controles de usuario antes. Por lo general, solo tengo los controles en un diálogo que permite el DialogResult = DialogResult.OK;

Gracias

¿Fue útil?

Solución

Los formularios abiertos modalmente se cerrarán automáticamente cuando se establezca su dialogrima. A partir de los sonidos, está configurando el dialogrimulario del control, no el formulario. Para hacer lo que está intentando hacer, necesita el control para establecer o activar la configuración del resultado del diálogo de formularios principales. Puedes hacer esto por cualquiera de los dos:

1. Pasando a través de una referencia del formulario al control, lo que permite que el control lo establezca.

2. Cree un evento en el control al que los formularios escuchan, lo que le dice que se cierre. (Camino recomendado)

3. (The Hacky Way) Establezca el resultado del diálogo de formularios usando este código:

this.ParentForm.DialogResult = DialogResult.OK;

El formulario también deberá mostrarse modalmente, de lo contrario deberá llamar al método Close () manualmente.

Otros consejos

Querrá usar delegados para resolver este problema.

En el código detrás de su control, defina un delegado que usará para decirle a su formulario principal que se cierre. Donde sea que esté en su control que desee tener el formulario principal cerrado, planteará este evento personalizado que será manejado por su forma principal. En aras del ejemplo, asumiremos que desea cerrar el formulario principal en un botón Haga clic en el control

public delegate void CloseHostFormEventHandler(Object sender, EventArgs e);

public partial class MyControl : Control {

    public event CloseHostFormEventHandler CloseFormEvent;


    public closeButton_Clicked(object sender, EventArgs) {
        // do your db stuff

        // you could create your own class here and pass the object to your main form if you wanted
        EventArgs myargs = new EventArgs(); 

        // tell host form to close itself
        CloseFormEvent(this, myargs);

    }
}

Ahora en su forma principal, querrá manejar el evento planteado por el control.

public partial class MyForm : Form {

    public MyForm() {

        InitializeComponent();

        // ill assume your control was added via the designer and thus done in InitializeComponent()

        // hook up event handler
        mycontrol.CloseFormEvent += CloseFormEventHandler(closeformCallback);
    }

    protected void closeformCallback(object sender, EventArgs e) {
        DialogResult = DialogResult.OK;
        this.Close();
    }


}

Voy a tomar una suposición salvaje ya que no has brindado mucha información.

El cuadro de diálogo no se cierra porque no es un diálogo modal. Intenta mostrarlo con ShowDialog() más bien que Show().

Como dice Tony. Debería llamar al método cerrado.

Lo que podría hacer es pasar una referencia a la llamada desde su control y llamar a su método cerrado desde allí.

Puede poner en el controlador de eventos de clic en su control de usuario, algo así:

        Form f = this.ParentForm;
        if (f != null)
        {
            f.DialogResult = DialogResult.OK;
        }

Dialogresult no cierra un no modal forma.

Debe llamar al método cerrado del formulario o en este cuadro de diálogo.

EDITAR

O use showDialog () en lugar de show ().

Editar de nuevo

De acuerdo a Dialogresult Documentation:

Cuando se muestra un formulario como un cuadro de diálogo modal, hacer clic en el botón Cerrar (el botón con una X en la esquina superior derecha del formulario) hace que el formulario se oculte y la propiedad Dialogresult se establezca en dialogresult.cancel. El método Cerrar no se llama automáticamente cuando el usuario hace clic en el botón Cerrar de un cuadro de diálogo o establece el valor de la propiedad DialogResult. En cambio, el formulario está oculto y se puede mostrar nuevamente sin crear una nueva instancia del cuadro de diálogo. Debido a este comportamiento, debe llamar al método de eliminación del formulario cuando su aplicación ya no necesita el formulario.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top