[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