[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