[英]How to hide the first column of a wxListCtrl in wxWidgets?
在wxWidgets(3.0.2版)C ++应用程序中,我试图隐藏wxListCtrl的第一列。
我没有找到执行此操作的成员函数,因此尝试将列的宽度设置为0:
myListCtrl->SetColumnWidth(0, 0);
第一个参数是列ID,第二个参数是像素宽度( wxListCtrl文档 )。
运行该程序后,第一列的标题按我的意愿被隐藏,但是第一列的每一行的数据与第二列的每一行的数据重叠(未隐藏)。 显然这不是我想要的。 第一列的标题和数据应隐藏。
在wxWidgets 3.0.2中,是否可以隐藏wxListCtrl的第一列(每行的标题和数据)?
我不相信你可以。 您有几种选择。
DeleteColumn(int columnIndex)
删除列。 您不会丢失任何数据,仅会丢失数据,因此,如果需要重新添加列,则始终可以重新插入该列并重新填充它。 显然,如果您的数据过大,这可能会很耗时。 wxLC_VIRTUAL
样式继承该类,并实现OnGetItemText
http://docs.wxwidgets.org/3.0/classwx_list_ctrl.html#a92370967f97215e6068326645ee76624 编辑 :要扩展注释问题,如何获取选定的项目索引:
当涉及到选定的项目时,wxListCtrl有点奇怪。 我确信这与需要支持报表,图标等不同视图有关。 在处理多列报告模式时,您可能会发现只能选择第一列中的项目。 如果您使用的是Windows,则应将其自动设置为“全行选择”,但我对其他操作系统一无所知。
无论如何,这是一个实用程序方法,它返回第一个选定的项(请注意,如果需要,您可以支持多选)。
//Get the item currently selected
int ListView::GetItemSelected() const
{
for(int i=0; i<GetItemCount(); ++i)
if (GetItemState(i, wxLIST_STATE_SELECTED) == wxLIST_STATE_SELECTED)
return i;
return -1;
}
如果需要(并且很有意义),可以连接列表项选择的事件。
this->Connect(wxEVT_COMMAND_LIST_ITEM_SELECTED, wxCommandEventHandler(ListView::selected_Changed), NULL, this);
然后在该事件处理程序中,获取选定的项目并执行所需的操作(完全取决于您的应用程序)。
您会注意到,我在这里使用派生类,这使事情变得容易得多,但您不必这样做。 您可以连接到MyMainForm::sqlResults_selectedChanged
东西。
有多种方法可以完成所有这些操作,您还可以在此处找到一些好的建议和帮助: https : //wiki.wxwidgets.org/WxListCtrl
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.