<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>