在wxWidgets(版本3.0.2)C ++应用程序中,我试图隐藏wxListCtrl的第一列。
我没有找到成员函数来执行此操作,所以我尝试将列的宽度设置为0:
myListCtrl->SetColumnWidth(0, 0);
第一个参数是列ID,第二个参数是宽度(以像素为单位wxListCtrl documentation)。
运行程序后,第一列的标题会被隐藏,但第一列的每一行的数据都与第二列的每一行的数据重叠(未隐藏)。这显然不是我想要的。标题和应隐藏第一列的数据。
在wxWidgets 3.0.2中,有没有办法隐藏wxListCtrl的第一列(每行的标题和数据)?
答案 0 :(得分:2)
我不相信你可以。你有几个选择。
DeleteColumn(int columnIndex)
删除列。您不会丢失任何数据,只是显示它,因此您可以随时重新插入列并重新填充它,如果您需要重新添加它。显然,如果您的数据过大,这可能会非常耗时。wxLC_VIRTUAL
样式继承该类并实现OnGetItemText
http://docs.wxwidgets.org/3.0/classwx_list_ctrl.html#a92370967f97215e6068326645ee76624 修改强>: 要扩展评论问题,如何获取所选项目索引:
对于选定的项目,wxListCtrl有点奇怪。我确定它与需要支持报告,图标等不同视图有关。处理多列报告模式时,您可能会发现只能选择第一列中的项目。如果您使用的是Windows,则应自动将其设置为" Full Row Select"但我不了解其他操作系统。
无论如何,这是一个返回第一个选定项目的实用工具方法(请注意,如果您愿意,可以支持多选)。
//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