Home   Artículos   Recursos   Foros   
Artíclos recientes publicados en Latindevelopers:

Visual C++: NSDoubleEdit: Un control para el manejo de números decimales en Visual C++.
Visual C++: Implementando una Calculadora en Visual C++
Visual C++: CCommandLine: Una clase para el uso de la linea de comando
Visual C++: Una clase para el manejo del Registro


Funcion UpdateData(true)

Aqui programadores en la plataforma Win32 con Visual C++ de Microsoft...

Moderador: latindeveloper

Funcion UpdateData(true)

Notapor khrisjian el Mar Oct 24, 2006 3:37 pm

Buen dia colegas, tengo una duda que quisiera me ayudaran a descifrar el problema, antes que nada estoy trabajando sobre VC++.NET 2003

Resumiendo, tengo una caja de Dialogo Modal donde tengo un editcontrol asociada a una variable CString m_Cuenta, y un boton Aceptar que me saca otra caja de dialogo modal, pero he aqui la condicion para esto:

->Este codigo es extraido del boton Aceptar

void Dialogo1::OnBnClickedAceptar(){
UpdateData(true);
if(m_Cuenta == ""){
Dialogo2 Dlg;
Dlg.DoModal();
}
}

Si mi editControl tiene un valor igual a "" (osea nada) , debe mostrarme la sgte caja de dialogo, en caso contrario no debe de hacerme nada

Lo interesante de esto es que parece que mi UpdateData(true) no funciona ya que al darle seguimiento al programa en la linea del IF, veo que mi m_Cuenta tiene valor "" A PESAR de que le haya puesto un valor cualquiera antes de presionar el boton aceptar

Cual es el problema aqui?
si no me deje entender porfavor puedo explicarlo con manzanitas jaja mentira
un saludo
khrisjian
Novato
Novato
 
Mensajes: 7
Registrado: Mar Oct 10, 2006 3:25 pm

Re: Funcion UpdateData(true)

Notapor latindeveloper el Mié Oct 25, 2006 9:19 pm

Antes que nada asegurate que la variable este actualizandose.

Código: Seleccionar todo
void Dialogo1::OnBnClickedAceptar(){
          UpdateData();         
          MesssageBox(m_Cuenta);
}


Luego, asegurate de quitarle los espacios en blanco y recien compararlo

Código: Seleccionar todo
void Dialogo1::OnBnClickedAceptar(){
          UpdateData();         
          m_Cuenta.Trim();
          if(m_Cuenta == "")
          {
      Dialogo2 Dlg;
      Dlg.DoModal();
          }
}



Tambien puedes averiguar la longitud de la cadena con m_Cuenta.GetLength();
Imagen
Avatar de Usuario
latindeveloper
Administrador
Administrador
 
Mensajes: 1061
Registrado: Lun Jun 02, 2003 8:29 pm
Ubicación: Peru

gracias pero... aun asi nada

Notapor khrisjian el Mar Oct 31, 2006 8:50 am

Hola antes que nada gracias por responder aunque ya migre a usar VC++ 6.0 y todo me esta saliendo excelente sin problemas, quiero saber de porque diablos no funciona lo mismo en C++ .NET 2003, hize todo lo q me dijiste pero aun asi no lo puedo comprender no sale

UpdateData(true);
if(m_Cad.GetLength() == 0) //ahora con esta funcion
{
AfxMessageBox("NO hay NADA");

}
else
AfxMessageBox("diske hay");

aqui al tener en la cadena cualquier cosa por ejemple "hola", aun asi me vota el mensaje NO hay NADA como si no exisitera nada, es increible la verdad he probado tambien con

if(m_Cad.Compare("")) //ahora con esta funcion
{
AfxMessageBox("NO hay NADA");

}
else
AfxMessageBox("diske hay");

e igual !
tal parece los de microsoft se olvidaron de esa funcion, ah! y tambien en VS 2005 la misma tontera :D
khrisjian
Novato
Novato
 
Mensajes: 7
Registrado: Mar Oct 10, 2006 3:25 pm

Re: gracias pero... aun asi nada

Notapor latindeveloper el Lun Nov 06, 2006 6:16 pm

Sucede que visual c++ 2005 suele no crear las entradas que relacionan el control con la variable, lo que puedes hacer es cerciorarte que existe las siguientes lineas:

En la definicion de la clase (archivo.h):

Código: Seleccionar todo
   //{{AFX_DATA(CDocumentPage1)

    ...

   CString   m_sNombre;
   //}}AFX_DATA


En la funcion DoDataExchange:

Código: Seleccionar todo
void CTuDialogo:DoDataExchange(CDataExchange* pDX)
{
   CPropertyPage::DoDataExchange(pDX);
   //{{AFX_DATA_MAP(CDocumentPage1)

   ...

   DDX_Text(pDX, IDC_NOMBRE, m_sNombre);
   //}}AFX_DATA_MAP
}



si no existen esas entradas entonces agregalas manualmente.

Saludos.
Imagen
Avatar de Usuario
latindeveloper
Administrador
Administrador
 
Mensajes: 1061
Registrado: Lun Jun 02, 2003 8:29 pm
Ubicación: Peru

Gracias... se agradece

Notapor khrisjian el Lun Nov 27, 2006 2:10 pm

Amigo latindeveloper me has salvado la vida, tenias razon ni el VS.NET 2003 y ni el VS 2005 generan esas lineas que enviaste y hacen falta
ahora podre continuar con mi proyecto

muchisimas gracias
un saludo
khrisjian
Novato
Novato
 
Mensajes: 7
Registrado: Mar Oct 10, 2006 3:25 pm


Volver a Visual C++

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 0 invitados