[C con Clase] Problema al seleccionar celdas de una wxGrid
mil100
andrestraspuesto en gmail.com
Lun Nov 9 19:21:23 CET 2009
Hola.
Estoy haciendo una aplicación para windowsXp con wxWidgets usando c++,
entre otras cosas contiene una tabla, que es una instancia de wxGrid.
Consigo crearla y acceder a las celdas sin ningún problema hasta que
creo un método que debe tomar los valores de las celdas seleccionadas.
Lo que me sucede es que al utilizar el metodo wxGrid::GetSelectedCells
no almacena ninguna coordenada en el wxGridCellCoordsArray por lo que
este tiene tamaño cero.
El codigo fuente sin la cabecera es el siguiente:
void TablaFrm::CreateGUIControls()
{
//Definición de sizers
s0 = new wxBoxSizer(wxVERTICAL);
s2 = new wxBoxSizer(wxHORIZONTAL);
result= new
wxGrid(this,ID_TAB,wxDefaultPosition,wxSize(400,400));//Crea la
tabla
s0->Add(result,0,wxALIGN_CENTER);
result->CreateGrid(2,1,wxGrid::wxGridSelectCells);
result->SetCellValue(0,0,wxT("Hola Mundo de las tablas"));
result->SetCellValue(1,0,wxT("Hola Mundo de las tablas"));
result->AutoSize();
s0->Add(s2,0,wxALIGN_CENTER);
//Definición de los botones
bt[0]= new
wxButton(this,wxID_OK,wxT("Buscar"),wxDefaultPosition,wxDefaultSize);
bt[1]= new
wxButton(this,wxID_EXIT,wxT("Salir"),wxDefaultPosition,wxDefaultSize);
s2->Add(bt[0],0,wxALIGN_LEFT|wxALL,5);
s2->Add(bt[1],0,wxALIGN_RIGHT|wxALL,5);
SetSizer(s0);
s0->Fit(this);
s0->SetSizeHints(this);
}
void TablaFrm::OnBuscar(wxCommandEvent& event)
{
wxString datos,a;
int r,c;
// result->SelectAll();
//Ni haciendo esto consigo que seleccione
algo
if(this->result->GetSelectedCells().size()!=0)
{
aux=this->result->GetSelectedCells().Last();
a.Printf("%d",this->result->GetSelectedCells().size());
wxMessageBox(a);//flag
}
datos.Printf(wxT("Elementos seleccionados:%d"),auxSelec.size());
if(auxSelec.size()==0)
{
wxMessageBox(wxT("Error no hay elementos
seleccionados"),datos); //flag
return;
}
r=aux.GetRow();
c=aux.GetCol();
a.Printf("c%d,r%d",c,r);
wxMessageBox(a);//flag
datos=this->result->GetCellValue(c,r);
if(wxTheClipboard->Open())
{
wxTheClipboard->SetData(new wxTextDataObject(datos));
wxTheClipboard->Close();
}
}
Las siguientes variables están declaradas en la cabecera tal como indico
a continuación:
wxGridCellCoordsArray auxSelec;
wxGridCellCoords aux;
Si alguno puede echarme una mano le estaré muy agradecido porque llevo
tiempo dandole vueltas y cada vez entiendo menos lo que sucede.
Un saludo y gracias por la atención dedicada.
Más información sobre la lista de distribución Cconclase