[C con Clase] [Bulk] problema con puntero utilizando wxwidgets!

Pedro Mateo pedromateoa en gmail.com
Lun Dic 31 16:03:50 CET 2007


gracias zelion!!!
prepare un codigo ejemplo donde me dal el problema
si cambias el puntero "buscar" poniendolo en un ambito publico( antecediendo
a la definicion de la clase) no te dara el error
es realmenter raro

//=================================================================
#include <wx/wx.h>
#include <wx/grid.h>
using namespace std;
class frame:public wxFrame{
    public:
    frame(wxWindow* p,const string& t):wxFrame(p,-1,t){Centre();}
};
frame* mainframe;

class form:public wxDialog{


    protected:                                                        //
PROPIEDADES
    friend class textbox;                                        //
acceso a la clase textbox
    friend class button;                                            //
acceso a la clase button
    wxBoxSizer* layout;                                            //
sizer principal
    wxBoxSizer* page;                                                //
sizer de contenido
    wxBoxSizer* header;                                            //
sizer cabecera
    wxBoxSizer* body;                                                //
sizer del cuerpo del formulario
    wxBoxSizer* footer;                                            //
sizer de pie de pagina
    wxGrid* grid;                                                    //
contiene el grid de la ventana
    wxButton* acept;                                                //
boton de aceptar
    wxButton* cancel;                                                //
cancelar
    wxButton* find;                                                // buscar

    wxTextCtrl* buscar;                                            // el
puntero fantasma

                                                                    //
EVENTOS
    void acept_procs(wxMouseEvent&);                        //    ocurre
cuando se preciona el boton de aceptar
    void cancel_procs(wxMouseEvent&);                    //    ocurre cuando
se preciona el boton de cancelar
    void find_procs(wxMouseEvent&);                        //    ocurre
cuando se preciona el boton de buscar
    void keypress(wxKeyEvent&);                            //    ocurre
cuando se preciona el boton de buscar

    public:                                                            //
CONSTRUCTORES
    form(const string&);                                            //
constructor sobrecargado
    void resize();                                                    //
recalcula el tamano de la ventana
    void refresh();                                                //
actualiza los objetos con la data
};

//    constructor sobrecargado
    form::form(const string& caption):wxDialog(mainframe,-1,caption){
        //    objetos principales
        new wxPanel(this);
        layout    =    new wxBoxSizer(wxHORIZONTAL);
        SetSizer(layout);

        //    enmarcando la pagina
        layout->Add(15,0,0,wxEXPAND);
        layout->Add(page    = new wxBoxSizer(wxVERTICAL),0,wxEXPAND);
        layout->Add(15,0,0,wxEXPAND);

        page->Add(header    = new wxBoxSizer(wxHORIZONTAL),0,wxEXPAND);
        page->Add(body        = new wxBoxSizer(wxVERTICAL),0,wxEXPAND);
        page->Add(footer    = new wxBoxSizer(wxHORIZONTAL),0,wxEXPAND);

        //    configurando marge
        header->Add(0,15);
        footer->Add(0,15);


        //    carga los parametros
        header->Add(5,35);
        wxBoxSizer* parameters_panel;
        header->Add(parameters_panel=new wxBoxSizer(4),wxEXPAND);
        buscar=new wxTextCtrl(this,-1);
        parameters_panel->Add(buscar,wxEXPAND);
        buscar->SetFocus();
        buscar->SetValue("esta es la cajita fantasma....presiona enter por
favor!");
        header->Add(find=new wxButton(this,wxID_FIND));
        find->SetDefault();

        //    cargando el grid
        body->Add(grid=new
wxGrid(this,-1,wxDefaultPosition,wxSize(700,600)));
        grid->Connect(wxEVT_KEY_DOWN,wxKeyEventHandler(form::keypress));
        grid->CreateGrid(5,6);

        //    cargando botones
        footer->Add(1,1,1,wxEXPAND);
        footer->Add(acept=new wxButton(this,wxID_OK));
        footer->Add(cancel=new wxButton(this,wxID_CANCEL));
        Connect(wxID_OK
,wxEVT_COMMAND_BUTTON_CLICKED,wxMouseEventHandler(form::acept_procs));
        Connect(wxID_CANCEL
,wxEVT_COMMAND_BUTTON_CLICKED,wxMouseEventHandler(form::cancel_procs));
        Connect(wxID_FIND
,wxEVT_COMMAND_BUTTON_CLICKED,wxMouseEventHandler(form::find_procs));


        resize();
        Centre();



    }

//    recalcula el tamano de la ventana
    void form::resize(){
        layout->SetSizeHints(this);
    }



//    ATENCION ATENCION     ATENCION ATENCION     ATENCION ATENCION
//    AQUI ES DONDE DA EL ERROR
    void form::keypress(wxKeyEvent& x){
        if(x.GetKeyCode()==27){
            buscar->SetFocus();  // EXACTAMENTE AQUI
            return;
        }
        x.Skip();
    }


//    ocurre cuando se preciona el boton de aceptar
    void form::acept_procs(wxMouseEvent& x){
        EndModal(123);
    }
//    ocurre cuando se preciona el boton de cancelar

    void form::cancel_procs(wxMouseEvent&){
        EndModal(-1);
    }
//    ocurre cuando se preciona el boton de cancelar

    void form::find_procs(wxMouseEvent&){
        wxMessageBox("voy primero a poner un texto en la cajita de busqueda
asi te das cuenta de que el puntero buscar funciona");
        buscar->SetValue("confirmado!!..el puntero funciona");
        wxMessageBox("ejecuto un programa que busca la informacion y le doy
el enfoque al grid para seleccionar el registro que desee");
        grid->SetCellValue(0, 0, "ahora es el momento de la
verdad!!...presiona escape para que de el error");
        grid->AutoSizeColumns();
        grid->SetFocus();
    }


class app:public wxApp{
    bool OnInit(){
        mainframe=new frame(NULL,"fradfasd");
        mainframe->Show();
        form* test=new form("prueba del problema");
        test->ShowModal();
    }
};
IMPLEMENT_APP(app)
//=================================================================
//=================================================================
//  fin del programa
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20071231/f4c6e9a8/attachment.html>


Más información sobre la lista de distribución Cconclase