如何在wxWidgets中隐藏WXLISTCRL的第一列? 上下文 在WxWIDGET(版本3.0.2)C++应用程序中,我试图隐藏WxListCtl的第一列。
我没有找到执行此操作的成员函数,因此我尝试将列的宽度设置为0:如何在wxWidgets中隐藏WXLISTCRL的第一列? 上下文 在WxWIDGET(版本3.0.2)C++应用程序中,我试图隐藏WxListCtl的第一列。,c++,user-interface,wxwidgets,C++,User Interface,Wxwidgets,我没有找到执行此操作的成员函数,因此我尝试将列的宽度设置为0: myListCtrl->SetColumnWidth(0, 0); 第一个参数是列ID,第二个参数是以像素为单位的宽度() 运行程序后,第一列的标题会按照我的要求隐藏,但第一列的每行数据与第二列的每行数据重叠(未隐藏)。这显然不是我想要的。标题和第一列的数据应隐藏 问题 在wxWidgets 3.0.2中,有没有一种方法可以隐藏WXLISTCRL的第一列(每行的标题和数据)?我不相信您可以。你有几个选择 使用DeleteCo
myListCtrl->SetColumnWidth(0, 0);
第一个参数是列ID,第二个参数是以像素为单位的宽度()
运行程序后,第一列的标题会按照我的要求隐藏,但第一列的每行数据与第二列的每行数据重叠(未隐藏)。这显然不是我想要的。标题和第一列的数据应隐藏
问题
在wxWidgets 3.0.2中,有没有一种方法可以隐藏WXLISTCRL的第一列(每行的标题和数据)?我不相信您可以。你有几个选择
DeleteColumn(int-columnIndex)
删除列。您不会丢失任何数据,只会丢失数据的显示,因此,如果需要重新添加列,您始终可以重新插入列并重新填充它。显然,如果您的数据过大,这可能会很耗时wxLC\u VIRTUAL
样式继承类,并实现OnGetItemText
MyMainForm::sqlResults\u selectedChanged
之类的东西
实现这一切的方法不止一种,你也可以在这里找到一些好的建议和帮助:我认为你做不到。你有几个选择
DeleteColumn(int-columnIndex)
删除列。您不会丢失任何数据,只会丢失数据的显示,因此,如果需要重新添加列,您始终可以重新插入列并重新填充它。显然,如果您的数据过大,这可能会很耗时wxLC\u VIRTUAL
样式继承类,并实现OnGetItemText
MyMainForm::sqlResults\u selectedChanged
之类的东西
实现这一切的方法不止一种,您也可以在这里找到一些好的建议和帮助:我用SQL查询的结果填充WXLISTCRL。列标题可以是例如“userID firstName lastName”。我不需要(也不想要)userID列,它是在用户界面中显示的第一列。这就是我想隐藏它的原因。我仍然需要它存在,因为双击一行wxListCtrl,我需要能够获取存储在第一列中的userID来做其他事情。我会研究你的第三点,看看它是否方便使用。作为建议,不要依赖你的UI控件来存储你的数据。有时这是有意义的(在简单的情况下),但通常更好的做法是单独维护数据文档,让UI成为查看该数据的窗口。将SQL查询结果保存在一个单独的列表中,在对数据执行操作时,只使用当前选定的行作为该列表的索引。我想我明白你的意思,但我想澄清一点。如果在WXLISTCRL中我没有索引列,但让我们说只有“firstName”和“lastName”列,它们可以以不同的方式排序并可能进行过滤,那么我如何从当前选定的行中获取索引?@Mat.R,您还可以设置该列的用户数据,无论是用户id、行id还是其他。或者,您可以将SQL结果保存在
//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);