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


Problema al modificar una caja de texto

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

Moderador: latindeveloper

Problema al modificar una caja de texto

Notapor sandra el Lun Jul 26, 2004 6:01 am

Hola a tod@s; Me estoy volviendo loca; Veamos si esto tiene explicacion; Tengo un programa simple, con unas cajas de texto; Luego utilizando el menu, emerge una caja de dialogo modal, con unca caja de texto, escribo algo, le doy al boton, y kiero que en la caja de texto principal, aparezca lo que he escrito anteriormente; hasta aqui correcto, funciona bien (no es que sea dificil)

void CInsertarTexto::OnOK()
{
UpdateData(false);
CDialog::OnOK();
m_pPrincipal->m_sTexto += texto;
m_pPrincipal->UpdateData(true);
}

m_pPrincipal es un puntero a la clase donde esta la caja que quiero modificar, m_sTexto es el identificador de esa caja, y texto el de la otra;

Pues bien, ahora, he dividido la vista, a la izquierda tengo un frame, con un controlador tree que me muestra mi disco duro, y a la derecha tengo la caja de texto; Y haciendolo igual, ahora me salta una excepcion cuando llega a la linea m_pPrincipal->UpdateData(true);

Me tiene loca, tiene explicacion??????

Gracias, y contarme si se os ocurre algo;
sandra
Usuario Activo
Usuario Activo
 
Mensajes: 47
Registrado: Jue Jun 24, 2004 4:50 am

Notapor sandra el Lun Ago 09, 2004 3:39 am

Sigo en las mismas, no doy con el problema; Me salta la siguiente excepcion, pero no se interpretarla; Una flecha me remarca la primera linea: ASSERT(::IsWin....). Si alguien sabe por que puede ser diganmelo, ya no se que probar mas;Gracias por leerme;
BOOL CWnd::UpdateData(BOOL bSaveAndValidate)
{
ASSERT(::IsWindow(m_hWnd)); // calling UpdateData before DoModal?

CDataExchange dx(this, bSaveAndValidate);

// prevent control notifications from being dispatched during UpdateData
_AFX_THREAD_STATE* pThreadState = AfxGetThreadState();
HWND hWndOldLockout = pThreadState->m_hLockoutNotifyWindow;
ASSERT(hWndOldLockout != m_hWnd); // must not recurse
pThreadState->m_hLockoutNotifyWindow = m_hWnd;

BOOL bOK = FALSE; // assume failure
TRY
{
DoDataExchange(&dx);
bOK = TRUE; // it worked
}
CATCH(CUserException, e)
{
// validation failed - user already alerted, fall through
ASSERT(!bOK);
// Note: DELETE_EXCEPTION_(e) not required
}
AND_CATCH_ALL(e)
{
// validation failed due to OOM or other resource failure
e->ReportError(MB_ICONEXCLAMATION, AFX_IDP_INTERNAL_FAILURE);
ASSERT(!bOK);
DELETE_EXCEPTION(e);
}
END_CATCH_ALL

pThreadState->m_hLockoutNotifyWindow = hWndOldLockout;
return bOK;
}
sandra
Usuario Activo
Usuario Activo
 
Mensajes: 47
Registrado: Jue Jun 24, 2004 4:50 am

Re: Problema al modificar una caja de texto

Notapor latindeveloper el Mar Ago 10, 2004 6:44 pm

Me parece que el problema esta.... :

void CInsertarTexto::OnOK()
{
UpdateData(false);
CDialog::OnOK();
m_pPrincipal->m_sTexto += texto;
m_pPrincipal->UpdateData(true); // <<---- Aqui
}

Por que seguramente el puntero m_pPrincipal no esta bien direccionado o el dialogo no esta disponible (inicializado) aun. Para asegurarte que estas haciendo lo correcto con ese puntero puedes modificar tu codigo asi:
Código: Seleccionar todo
void CInsertarTexto::OnOK()
{
   UpdateData(false);

  if(m_pPrincipal != NULL && ::IsWindow(m_pPrincipal->m_hWnd))
  {
    m_pPrincipal->m_sTexto += texto;
    m_pPrincipal->UpdateData(true);   // <<---- Aqui
    CDialog::OnOK();
}else{
  // evidentemente hay un error con la variable  m_pPrincipal
}

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

Re: Problema al modificar una caja de texto

Notapor sandra el Mié Ago 11, 2004 2:40 am

Muchas gracias por contestar navisoft; Lo sustitui por tu codigo, y se ejecuta el else, por lo que debe de haber un problemilla con el puntero m_pPrincipal
sandra
Usuario Activo
Usuario Activo
 
Mensajes: 47
Registrado: Jue Jun 24, 2004 4:50 am


Volver a Visual C++

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado