none
Problema al asignar un evento a un Button Control. RRS feed

  • Pregunta

  • Hola!

    Pues el problema es que estoy generando una clase vista (view, la clase base es CRecordView) manualmente para

    visualizar en un documento. Asociado a esta clase vista tengo un diálogo que tiene dos controles (Control Button), dos botones, y quiero asociar una funcion con la pulsacion de esos controles.

    Pues selecciono el boton, pulso boton derecho del raton y selecciono Agregar controlador de eventos... y selecciono BN_CLICKED con un nombre, etc.. y al pulsar aceptar me dice que el archivo de la clase es de solo lectura y no se puede modificar.

    ¿Cómo puedo saber si un archivo .h es de solo lectura o no?

     

    Gracias  

    lunes, 19 de enero de 2009 15:56

Todas las respuestas

  •  

    Vaya, suponiendo que el fichero cabecera no esté en solo lectura (lo puedes mirar con el botón derecho en las propiedades del mismo desde el explorador de windows), es un bug que está presente en Visual Studio 2010...

     

    ¿Qué versión de Visual Studio estás usando?

    lunes, 19 de enero de 2009 17:58
    Moderador
  • Estoy utilizando Visual Studio 2008.

    La cuestion es que yo generé un documento SDI, con lo que solo genera una vista, pero despues tengo que añadir manualmente otras vistas al documento y para eso sigo el siguiente proceso:

    1.-Creo un diálogo con los controles que necesito, edit control, button control, etc.

    2.-Añado al proyecto una nueva clase vista que está asociada a ese diálogo creado.

    2.1.-En el explorador de soluciones selecciono el nombre del proyecto,  pulso el botón derecho, pulso Agregar - Nuevo elemento... me sale un menu emergente con el que introduzco un archivo .h donde declaro la clase y todas sus funciones, todo esto manualmente.

    2.2.-Con el mismo proceso anterior añado un archivo .cpp en el que defino la clase vista, todas sus funciones, etc.

    3.-Entonces si ahora quiero asociar un evento a la pulsacion de cualquiera de estos controles, voy  al dialogo, selecciono el control, pulso boton derecho, Agregar controlador de eventos... y surge el dialogo denominado Asistente para controladores de eventos, selecciono el Tipo de mensaje -> BN-CLICKED, un Nombre de controlador de funciones->OnBnClickedOrders, y la clase de vista asociada de la Lista de clases -> CCustomerView.

    4.-Pulso Agr/Editar y me surge un mensaje que dice

    No se puede agregar o quitar la operacion porque el elemento de codigo CCustomerView es de solo lectura.

     

    Este ultimo paso me deberia generar una funcion en la clase vista que seria ejecutada cada vez que se pulsa ese control, pero esto no es asi.

     

    Gracias por la ayuda..

     

    martes, 20 de enero de 2009 10:13
  • Pues debería funcionarte... No obstante, veamos un par de cosas, ya que la vista la has creado a mano:

     

    • ¿Hereda esa clave vista de CFormView?
    • ¿Tiene el ID correcto del diálogo?
    • ¿Están bien declarados y definidos el mapa de mensajes?
    • ¿Tienes la función DDX de intercambio que se genera cuando se tienen variables representando controles?
    • Quizás al haberlo hecho a mano falten ciertas marcas que Visual Studio pone para saber por dónde va y como no están no puede hacer nada de forma automática...

    Lo que puedes hacer es crearte un proyecto nuevo con el asistente, crearte la vista que quieres en ese proyecto y luego copiar el fuente e insertar el texto del diálogo creado en el fichero .RC de tu proyecto original...

     

    miércoles, 21 de enero de 2009 15:37
    Moderador
  • Hola! Te respondo a las preguntas:

     

    1.- La clase hereda de CRecordView.

    class CCustomerView : public CRecordView

    Estoy trabajando con una base de datos y quiero mostrar un recordset de una tabla de la base en la vista.

     

    2.- Sí, el ID del diálogo es el correcto.

     

    3.- OK!!!!!!!!!!!! EL PROBLEMA ESTABA AQUÍ, YA QUE NO DECLARABA DE FORMA CORRECTA EL MAPA DE MENSAJES. Ahora me deja agregar eventos a los controles.

     

    Gracias, me ha sido de gran ayuda.

     

    viernes, 23 de enero de 2009 11:26
  • ¡Bien!

     

    Pero no olvides marcar como respuesta el mensaje adecuado. :-)

    viernes, 23 de enero de 2009 11:29
    Moderador