<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:st1="urn:schemas-microsoft-com:office:smarttags" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
<meta name=Generator content="Microsoft Word 11 (filtered medium)">
<!--[if !mso]>
<style>
v\:* {behavior:url(#default#VML);}
o\:* {behavior:url(#default#VML);}
w\:* {behavior:url(#default#VML);}
.shape {behavior:url(#default#VML);}
</style>
<![endif]--><o:SmartTagType
namespaceuri="urn:schemas-microsoft-com:office:smarttags" name="PersonName"/>
<!--[if !mso]>
<style>
st1\:*{behavior:url(#default#ieooui) }
</style>
<![endif]-->
<style>
<!--
/* Font Definitions */
@font-face
{font-family:Tahoma;
panose-1:2 11 6 4 3 5 4 4 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
{margin:0cm;
margin-bottom:.0001pt;
font-size:12.0pt;
font-family:"Times New Roman";}
a:link, span.MsoHyperlink
{color:#808040;
text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
{color:purple;
text-decoration:underline;}
span.EstiloCorreo17
{mso-style-type:personal-reply;
font-family:Arial;
color:navy;}
@page Section1
{size:595.3pt 841.9pt;
margin:70.85pt 3.0cm 70.85pt 3.0cm;}
div.Section1
{page:Section1;}
-->
</style>
</head>
<body lang=ES link="#808040" vlink=purple>
<div class=Section1>
<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'>Hola Pedro.<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'>El tema de eventos hay veces que da
quebraderos de cabeza, jejeje.<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'><o:p> </o:p></span></font></p>
<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'>Bien la historia esta en que en el codigo
donde obtienesel evento:<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=3 face="Times New Roman"><span style='font-size:
12.0pt'><br>
</span></font><font size=2 color=blue face="Courier New"><span lang=EN-GB
style='font-size:10.0pt;font-family:"Courier New";color:blue'>void</span></font><font
size=2 face="Courier New"><span lang=EN-GB style='font-size:10.0pt;font-family:
"Courier New"'> <font color="#010001"><span style='color:#010001'>form::keypress(wxKeyEvent&
x)<o:p></o:p></span></font></span></font></p>
<p class=MsoNormal><font size=2 color="#010001" face="Courier New"><span
style='font-size:10.0pt;font-family:"Courier New";color:#010001'>{<br>
</span></font><font size=2 color=blue
face="Courier New"><span lang=EN-GB style='font-size:10.0pt;font-family:"Courier New";
color:blue'>if</span></font><font size=2 color="#010001" face="Courier New"><span
style='font-size:10.0pt;font-family:"Courier New";color:#010001'>(x.GetKeyCode()==13)<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 color="#010001" face="Courier New"><span
style='font-size:10.0pt;font-family:"Courier New";color:#010001'> {<br>
buscar->SetFocus(); </span></font><font size=2 color=green
face="Courier New"><span style='font-size:10.0pt;font-family:"Courier New";
color:green'>// EXACTAMENTE AQUI</span></font><font size=2 color="#010001"
face="Courier New"><span style='font-size:10.0pt;font-family:"Courier New";
color:#010001'><br>
</span></font><font
size=2 color=blue face="Courier New"><span lang=EN-GB style='font-size:10.0pt;
font-family:"Courier New";color:blue'>return</span></font><font size=2
color="#010001" face="Courier New"><span style='font-size:10.0pt;font-family:
"Courier New";color:#010001'>;<br>
}<br>
x.Skip();<br>
}<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'><o:p> </o:p></span></font></p>
<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'>Realmente si tu pones:<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 color="#010001" face="Courier New"><span
style='font-size:10.0pt;font-family:"Courier New";color:#010001'>wxString</span></font><font
size=2 face="Courier New"><span style='font-size:10.0pt;font-family:"Courier New"'>
<font color="#010001"><span style='color:#010001'>aa</span></font> = <font
color=blue><span style='color:blue'>this</span></font>-><font color="#010001"><span
style='color:#010001'>GetName</span></font>();<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Courier New"><span style='font-size:10.0pt;
font-family:"Courier New"'>Veras que el objeto dueño del evento es el datagrid
y no el form, con lo que aunque el compilador no te da un error por que es una
funcion callback y no se entera, realmente no se puede hacer;<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Courier New"><span style='font-size:10.0pt;
font-family:"Courier New"'><o:p> </o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Courier New"><span style='font-size:10.0pt;
font-family:"Courier New"'>This->buscar->SetFocus(); <o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Courier New"><span style='font-size:10.0pt;
font-family:"Courier New"'><o:p> </o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Courier New"><span style='font-size:10.0pt;
font-family:"Courier New"'>Ya que ‘buscar’ no forma parte del
datagrid.<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Courier New"><span style='font-size:10.0pt;
font-family:"Courier New"'>Cuando trabajes con eventos intenta buscar los
controles por sus nombres en la ventana padre, ya que son funciones CallBack y
puede que el puntero ‘this’ no apunte al objeto que creas, para
evitar estos errores puedes realizar lo siguiente:<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'><o:p> </o:p></span></font></p>
<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'><o:p> </o:p></span></font></p>
<p class=MsoNormal style='text-autospace:none'><font size=2 color=blue
face="Courier New"><span lang=EN-GB style='font-size:10.0pt;font-family:"Courier New";
color:blue'>void</span></font><font size=2 face="Courier New"><span lang=EN-GB
style='font-size:10.0pt;font-family:"Courier New"'> <font color="#010001"><span
style='color:#010001'>form</span></font>::<font color="#010001"><span
style='color:#010001'>keypress</span></font>(<font color="#010001"><span
style='color:#010001'>wxKeyEvent</span></font>& <font color="#010001"><span
style='color:#010001'>x</span></font>)<o:p></o:p></span></font></p>
<p class=MsoNormal style='text-autospace:none'><font size=2 face="Courier New"><span
lang=EN-GB style='font-size:10.0pt;font-family:"Courier New"'>{<o:p></o:p></span></font></p>
<p class=MsoNormal style='text-autospace:none'><font size=2 face="Courier New"><span
lang=EN-GB style='font-size:10.0pt;font-family:"Courier New"'> </span></font><font
size=2 color=blue face="Courier New"><span style='font-size:10.0pt;font-family:
"Courier New";color:blue'>if</span></font><font size=2 face="Courier New"><span
style='font-size:10.0pt;font-family:"Courier New"'>(<font color="#010001"><span
style='color:#010001'>x</span></font>.<font color="#010001"><span
style='color:#010001'>GetKeyCode</span></font>()==13)<o:p></o:p></span></font></p>
<p class=MsoNormal style='margin-left:35.4pt;text-autospace:none'><font size=2
face="Courier New"><span style='font-size:10.0pt;font-family:"Courier New"'> {<o:p></o:p></span></font></p>
<p class=MsoNormal style='text-autospace:none'><font size=2 face="Courier New"><span
style='font-size:10.0pt;font-family:"Courier New"'> <font
color="#010001"><span style='color:#010001'>wxString</span></font> <font
color="#010001"><span style='color:#010001'>aa</span></font> = <font
color=blue><span style='color:blue'>this</span></font>-><font color="#010001"><span
style='color:#010001'>GetName</span></font>(); <font color=green><span
style='color:green'>// Obtener el nombre del objeto dueño del evento
"GRID" para comprobar quien es ‘this’<o:p></o:p></span></font></span></font></p>
<p class=MsoNormal style='text-autospace:none'><font size=2 face="Courier New"><span
style='font-size:10.0pt;font-family:"Courier New"'> <font
color="#010001"><span style='color:#010001'>wxWindow</span></font> *<font
color="#010001"><span style='color:#010001'>bb</span></font> = <font
color=blue><span style='color:blue'>this</span></font>-><font color="#010001"><span
style='color:#010001'>GetParent</span></font>()-><font color="#010001"><span
style='color:#010001'>FindWindow</span></font>(<font color="#010001"><span
style='color:#010001'>_T</span></font>(<font color="#a31515"><span
style='color:#A31515'>"text"</span></font>)); <font color=green><span
style='color:green'>// Buscar el control que quieres dar el foco</span></font><o:p></o:p></span></font></p>
<p class=MsoNormal style='text-autospace:none'><font size=2 face="Courier New"><span
style='font-size:10.0pt;font-family:"Courier New"'> <font
color="#010001"><span style='color:#010001'>bb</span></font>-><font
color="#010001"><span style='color:#010001'>SetFocus</span></font>(); <font
color=green><span style='color:green'>// Poner el foco en el control<o:p></o:p></span></font></span></font></p>
<p class=MsoNormal style='text-autospace:none'><font size=2 face="Courier New"><span
style='font-size:10.0pt;font-family:"Courier New"'> <font
color=blue><span style='color:blue'>return</span></font>;<o:p></o:p></span></font></p>
<p class=MsoNormal style='text-autospace:none'><font size=2 face="Courier New"><span
style='font-size:10.0pt;font-family:"Courier New"'> }<o:p></o:p></span></font></p>
<p class=MsoNormal style='text-autospace:none'><font size=2 face="Courier New"><span
style='font-size:10.0pt;font-family:"Courier New"'> <font color="#010001"><span
style='color:#010001'>x</span></font>.<font color="#010001"><span
style='color:#010001'>Skip</span></font>();<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face="Courier New"><span style='font-size:10.0pt;
font-family:"Courier New"'> }<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'>}<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'><o:p> </o:p></span></font></p>
<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'>De todas formas, en el codigo existen
varios errores, como pasar de std::string a wxString sin hacer conversión, y yo
tambien me acostumbraria a usar la macro “_T()” para poner cadenas
en unicode, ya que te evitaras problemas en el futuro, para ello en la version
2.8 debes compilar en debug Unicode.<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'>Bueno todo esto ultimo es opcional,
dependiendo de la version de WxWidgets que uses.<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'><o:p> </o:p></span></font></p>
<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'>Espero haberte servido de ayuda, de todas
formas indagare mas en el codigo cuando tenga un poco de tiempo, ya que solo
pasa eso con el control wxTextCtrl, y eso me mosquea.<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'><o:p> </o:p></span></font></p>
<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'>Un saludo.<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'><o:p> </o:p></span></font></p>
<div>
<p class=MsoNormal align=right style='text-align:right'><font size=2
color=navy face=Arial><span style='font-size:10.0pt;font-family:Arial;
color:navy'>.: ZeLion :.</span></font><o:p></o:p></p>
</div>
<div style='border:none;border-left:solid blue 1.5pt;padding:0cm 0cm 0cm 4.0pt'>
<div>
<div class=MsoNormal align=center style='text-align:center'><font size=3
face="Times New Roman"><span style='font-size:12.0pt'>
<hr size=2 width="100%" align=center tabindex=-1>
</span></font></div>
<p class=MsoNormal><b><font size=2 face=Tahoma><span style='font-size:10.0pt;
font-family:Tahoma;font-weight:bold'>De:</span></font></b><font size=2
face=Tahoma><span style='font-size:10.0pt;font-family:Tahoma'>
cconclase-bounces@listas.conclase.net
[mailto:cconclase-bounces@listas.conclase.net] <b><span style='font-weight:
bold'>En nombre de </span></b>Pedro Mateo<br>
<b><span style='font-weight:bold'>Enviado el:</span></b> lunes, 31 de diciembre
de 2007 16:04<br>
<b><span style='font-weight:bold'>Para:</span></b> <st1:PersonName w:st="on">Lista
de correo sobre C y C++</st1:PersonName><br>
<b><span style='font-weight:bold'>Asunto:</span></b> [Bulk] Re: [C con Clase]
[Bulk] problema con puntero utilizando wxwidgets!</span></font><o:p></o:p></p>
</div>
<p class=MsoNormal><font size=3 face="Times New Roman"><span style='font-size:
12.0pt'><o:p> </o:p></span></font></p>
<p class=MsoNormal><font size=3 face="Times New Roman"><span style='font-size:
12.0pt'>gracias zelion!!!<br>
prepare un codigo ejemplo donde me dal el problema<br>
si cambias el puntero "buscar" poniendolo en un ambito publico(
antecediendo a la definicion de la clase) no te dara el error<br>
es realmenter raro <br>
<br>
//=================================================================<br>
#include <wx/wx.h><br>
#include <wx/grid.h><br>
using namespace std;<br>
class frame:public wxFrame{<br>
public:<br>
frame(wxWindow* p,const string&
t):wxFrame(p,-1,t){Centre();} <br>
};<br>
frame* mainframe; <br>
<br>
class form:public wxDialog{<br>
<br>
<br>
protected:
// PROPIEDADES<br>
friend class textbox;
// acceso a la clase textbox <br>
friend class button;
// acceso a la clase button<br>
wxBoxSizer* layout;
// sizer principal<br>
wxBoxSizer* page;
// sizer de contenido <br>
wxBoxSizer* header;
// sizer cabecera<br>
wxBoxSizer* body;
// sizer del cuerpo del
formulario<br>
wxBoxSizer* footer;
// sizer de pie de pagina <br>
wxGrid* grid;
//
contiene el grid de la ventana<br>
wxButton* acept;
// boton de aceptar<br>
wxButton* cancel;
// cancelar <br>
wxButton* find;
// buscar<br>
<br>
wxTextCtrl* buscar;
// el puntero fantasma<br>
<br>
// EVENTOS <br>
void acept_procs(wxMouseEvent&);
// ocurre cuando se preciona el boton de
aceptar<br>
void cancel_procs(wxMouseEvent&);
// ocurre cuando se preciona el boton de cancelar <br>
void find_procs(wxMouseEvent&);
// ocurre cuando se preciona el boton de
buscar<br>
void keypress(wxKeyEvent&);
// ocurre cuando se
preciona el boton de buscar <br>
<br>
public:
// CONSTRUCTORES<br>
form(const string&);
// constructor
sobrecargado<br>
void resize();
//
recalcula el tamano de la ventana <br>
void refresh();
// actualiza los
objetos con la data<br>
};<br>
<br>
// constructor sobrecargado
<br>
form::form(const string& caption):wxDialog(mainframe,-1,caption){
<br>
// objetos principales<br>
new wxPanel(this);
<br>
layout
= new wxBoxSizer(wxHORIZONTAL);<br>
SetSizer(layout);<br>
<br>
// enmarcando la pagina<br>
layout->Add(15,0,0,wxEXPAND); <br>
layout->Add(page =
new wxBoxSizer(wxVERTICAL),0,wxEXPAND);<br>
layout->Add(15,0,0,wxEXPAND);<br>
<br>
page->Add(header =
new wxBoxSizer(wxHORIZONTAL),0,wxEXPAND);<br>
page->Add(body
= new wxBoxSizer(wxVERTICAL),0,wxEXPAND); <br>
page->Add(footer =
new wxBoxSizer(wxHORIZONTAL),0,wxEXPAND);<br>
<br>
// configurando marge<br>
header->Add(0,15);<br>
footer->Add(0,15);<br>
<br>
<br>
// carga los parametros
<br>
header->Add(5,35);<br>
wxBoxSizer* parameters_panel;<br>
header->Add(parameters_panel=new
wxBoxSizer(4),wxEXPAND);<br>
buscar=new wxTextCtrl(this,-1);<br>
parameters_panel->Add(buscar,wxEXPAND); <br>
buscar->SetFocus();<br>
buscar->SetValue("esta es la
cajita fantasma....presiona enter por favor!");<br>
header->Add(find=new
wxButton(this,wxID_FIND));<br>
find->SetDefault(); <br>
<br>
// cargando el grid<br>
body->Add(grid=new
wxGrid(this,-1,wxDefaultPosition,wxSize(700,600)));<br>
grid->Connect(wxEVT_KEY_DOWN,wxKeyEventHandler(form::keypress));<br>
grid->CreateGrid(5,6); <br>
<br>
// cargando botones<br>
footer->Add(1,1,1,wxEXPAND);<br>
footer->Add(acept=new
wxButton(this,wxID_OK));<br>
footer->Add(cancel=new
wxButton(this,wxID_CANCEL));<br>
Connect(wxID_OK
,wxEVT_COMMAND_BUTTON_CLICKED,wxMouseEventHandler(form::acept_procs)); <br>
Connect(wxID_CANCEL
,wxEVT_COMMAND_BUTTON_CLICKED,wxMouseEventHandler(form::cancel_procs));<br>
Connect(wxID_FIND
,wxEVT_COMMAND_BUTTON_CLICKED,wxMouseEventHandler(form::find_procs));<br>
<br>
<br>
resize(); <br>
Centre();<br>
<br>
<br>
<br>
}<br>
<br>
// recalcula el tamano de la ventana <br>
void form::resize(){<br>
layout->SetSizeHints(this);<br>
}<br>
<br>
<br>
<br>
// ATENCION ATENCION ATENCION ATENCION
ATENCION ATENCION <br>
// AQUI ES DONDE DA EL ERROR<br>
void form::keypress(wxKeyEvent& x){<br>
if(x.GetKeyCode()==27){<br>
buscar->SetFocus(); // EXACTAMENTE AQUI<br>
return;<br>
}<br>
x.Skip();<br>
}<br>
<br>
<br>
// ocurre cuando se preciona el boton de
aceptar <br>
void form::acept_procs(wxMouseEvent& x){<br>
EndModal(123);<br>
}<br>
// ocurre cuando se preciona el boton de
cancelar
<br>
void form::cancel_procs(wxMouseEvent&){<br>
EndModal(-1);<br>
}
<br>
// ocurre cuando se preciona el boton de
cancelar
<br>
void form::find_procs(wxMouseEvent&){ <br>
wxMessageBox("voy primero a poner un
texto en la cajita de busqueda asi te das cuenta de que el puntero buscar
funciona");<br>
buscar->SetValue("confirmado!!..el puntero funciona"); <br>
wxMessageBox("ejecuto un programa
que busca la informacion y le doy el enfoque al grid para seleccionar el
registro que desee");<br>
grid->SetCellValue(0, 0, "ahora
es el momento de la verdad!!...presiona escape para que de el error"); <br>
grid->AutoSizeColumns();<br>
grid->SetFocus();
<br>
}<br>
<br>
<br>
class app:public wxApp{<br>
bool OnInit(){<br>
mainframe=new
frame(NULL,"fradfasd");<br>
mainframe->Show(); <br>
form* test=new form("prueba del
problema");<br>
test->ShowModal();
<br>
}<br>
};<br>
IMPLEMENT_APP(app)<br>
//=================================================================<br>
//=================================================================<br>
// fin del programa<o:p></o:p></span></font></p>
</div>
</div>
</body>
</html>