From 04:00 PM CDT – 08:00 PM CDT (09:00 PM UTC – 01:00 AM UTC) Tuesday, April 16, ni.com will undergo system upgrades that may result in temporary service interruption.

We appreciate your patience as we improve our online experience.

Discusiones sobre Productos NI

cancelar
Mostrando los resultados de 
Buscar en lugar de 
Quiere decir: 

Asignar un command button a dos operaciones distintas

Hola de nuevo, ya tardaba en escribir eh?.Bueno, aqui va mi problema. Tengo un boton commandbutton llamado MOVER.Este commandbutton lo tengo en dos paneles diferentes, PANEL1 y PANEL2. En ambos tengo el mismo boton MOVER. En los dos paneles tengo un cuadro de texto que al pulsar MOVER me envia datos a otro TEXTBOX. Pero cuando vuelvo ATRAS (creado con un RemovePopUp) y vuelvo a darle a MOVER para pasar el dato al cuadro, me devuelve un cero.

Tengo este codigo:

int CVICALLBACK MOVER (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2)
{
 double x;
 
 
 
 switch (event)
 {
  case EVENT_COMMIT:
  
  panel3=LoadPanel(0,"Menu.uir",PANEL_3);
  InstallPopup(panel3);
   
   
  
  GetCtrlVal(PANEL_2,PANEL_2_NUMERIC,&x);
  SetCtrlVal(PANEL_3,PANEL_3_NUMERIC,x);
  
   
  
   break;
 }
 return 0;
}
 

int CVICALLBACK MOVER2 (int panel, int control, int event,
  void *callbackData, int eventData1, int eventData2)
{   double y;
 switch (event)
 {
  case EVENT_COMMIT:
  
  
  panel5=LoadPanel(0,"Menu.uir",PANEL_5);
  InstallPopup(panel5);    
  
  GetCtrlVal(PANEL_4,PANEL_4_NUMERIC,&y);
  SetCtrlVal(PANEL_5,PANEL_5_NUMERIC,y);

   break;
 }
 return 0;
}
Gracias por vuestra ayuda, Si no queda claro lo decis vale?Gracias

0 kudos
Mensaje 1 de 2
2.961 Vistas

Hola motores,

creo que ya te comenté en algun momento que debes usar al nombre de un panel solamente en la instrucción LoadPanel, mientras que en todas las otras instrucciones para leer / escribir controles u leer / escribir propriedades de paneles u controles deber de usar al panel handle (¿manillar?) que sale del LoadPanel. Aquí va tu código corregido en este sentido:

 

    panel3 = LoadPanel (0, "Menu.uir", PANEL_3);
    InstallPopup(panel3);  
  
    GetCtrlVal (panel, PANEL_2_NUMERIC, &x);
    SetCtrlVal (panel3, PANEL_3_NUMERIC, x);

 

Pon atención a la línea GetCtrlVal: aquí he usado simplemente "panel" porque el manillar del panel en el que está el control cuya callback se está ejecutando viene como primer parámetro de la callback misma.

En el SetCtrlVal, por el contrario, he usado "panel3" por indicar al programa que el control por escribir está en otro panel cargado con LoadPanel.

 

PANEL_2 y PANEL_3 son nombres con asociado un valor numérico (definido en el archivo .H asociado al .UIR) que no tiene referencia alguna con el panel efectivamente cargado en la memoria con LoadPanel. Puede pasar que usándolos se obtenga algo en el programa, pero es solamente por una coincidencia (el manillar de un panel tiene el mismo valor de su nombre): lo más frecuente es que el valor que corresponde al nombre de un panel se refiera a otro panel presente en la memoria u a ninguno (lo que parecepasar a tí en este momento).

 

 

¿Has estado mirando a los ejemplos como te comenté hace un rato?

Mensaje editado por Roberto Bozzolo


Proud to use LW/CVI from 3.1 on.

My contributions to the Developer Community
________________________________________
If I have helped you, why not giving me a kudos?
0 kudos
Mensaje 2 de 2
2.955 Vistas