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

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

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

Post by 64com »

Прошу не забрасывать тапками т.к. я только начал изучать 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)

Post by 64com »

На данный момент в качестве временного решения вижу добавление в таблицу событий обработчик 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 для каждого элемента списка?
ONEEYEMAN
Part Of The Furniture
Part Of The Furniture
Posts: 7459
Joined: Sat Apr 16, 2005 7:22 am
Location: USA, Ukraine

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

Post by ONEEYEMAN »

Dobrogo vremeni sutok,
Tretja kolonka - eto sluchajno ne fon?
Naschet obnovlenija - tolko tak.

Poprobujte wxDataViewCtrl, tam mpget byt interfejs bolee privjazan k baze dannyh.

Spasibo.
Post Reply