Пустой элемент в окне списка (wxListCtrl)

Это русская секция форума wxWidjets. В этой секции вы можете обсуждать любые вопросы, связанные с wxWidgets на вашем родном языке.
64com
In need of some credit
In need of some credit
Posts: 2
Joined: Sat Dec 02, 2017 11:02 am

Пустой элемент в окне списка (wxListCtrl)

Postby 64com » Sat Dec 02, 2017 11:36 am

Прошу не забрасывать тапками т.к. я только начал изучать wxWidgets. Проблема, думаю, простая и заключается она в следующем: создаю панель с вкладкой (wxNotebook), внутрь которой помещаю список (wxListCtrl) из двух колонок, но на деле выводится три колонки, последняя из которых безымянная. Вопрос: каким образом избавиться от последней колонки? Код:

Code: Select all

   wxNotebook* pNoteBook = new wxNotebook(this, wxID_ANY);
   wxPanel* pPanel = new wxPanel(pNoteBook, wxID_ANY);   
   wxListCtrl* pList = new wxListCtrl(pPanel, ID_ATTR_CTRL, wxPoint(-1, -1), wxDefaultSize, wxLC_REPORT | wxBORDER_RAISED);

   pList->InsertColumn(0, wxT("Param 0"), wxLIST_FORMAT_CENTRE);
   pList->InsertColumn(1, wxT("Param 1"), wxLIST_FORMAT_CENTRE);

   wxString label;
   label.Printf(wxT("145"));
   long item = pList->InsertItem(0, label, 0);
   pList->SetItem(item, 0, label);

   label.Printf(wxT("5896"));
   pList->SetItem(item, 1, label);

   label.Printf(wxT("41"));
   item = pList->InsertItem(1, label, 0);
   pList->SetItem(item, 0, label);

   label.Printf(wxT("470"));
   pList->SetItem(item, 1, label);

   pList->SetSingleStyle(wxLC_HRULES | wxLC_VRULES, true);

   wxSizer* pPanelSizer = new wxBoxSizer(wxVERTICAL);
   pList->SetMinSize(wxSize(800, 400));
   pPanelSizer->Add(pList, 1, wxGROW | wxALL, 5);
   pPanel->SetSizerAndFit(pPanelSizer);

   pNoteBook->AddPage(pPanel, "Tab 1");

   wxSizer* pMainSizer = new wxBoxSizer(wxVERTICAL);
   pMainSizer->Add(pNoteBook, 1, wxGROW);
   SetSizerAndFit(pMainSizer);


Результат:Image

64com
In need of some credit
In need of some credit
Posts: 2
Joined: Sat Dec 02, 2017 11:02 am

Re: Пустой элемент в окне списка (wxListCtrl)

Postby 64com » Sat Dec 02, 2017 1:27 pm

На данный момент в качестве временного решения вижу добавление в таблицу событий обработчик EVT_LIST_COL_DRAGGING, а в функцию-обработчик такой код:

Code: Select all

void MyFrame::OnColumnDrag(wxListEvent& event)
{
   if(event.GetColumn() >= 0 && event.GetColumn() < pList->GetColumnCount() - 1)
   {
      pList->SetColumnWidth(pList->GetColumnCount() - 1, wxLIST_AUTOSIZE_USEHEADER);
   }
}


В результате при перетаскивании "ползунка" ширины любых из столбцов, предшествующих последнему столбу, ширина заголовка последнего будет устанавливаться по ширине окна. Тем самым "безымянный" столбец не будет виден.

Дополнительный вопрос: как правильно обновлять данные в wxListCtrl, к примеру, читая их из БД или получая динамически любым другим путем? Имеется в виду не изменения кол-ва строк в списке, а именно значений элементов. Использовать SetItem для каждого элемента списка?


Return to “wxWidgets Development (Russian)”

Who is online

Users browsing this forum: No registered users and 3 guests