gpt4 book ai didi

c++ - 如何在 wxWidgets 中隐藏 wxListCtrl 的第一列?

转载 作者:行者123 更新时间:2023-11-28 01:35:52 26 4
gpt4 key购买 nike

上下文

在 wxWidgets(版本 3.0.2)C++ 应用程序中,我试图隐藏 wxListCtrl 的第一列。

我没有找到执行此操作的成员函数,所以我尝试将列的宽度设置为 0:

myListCtrl->SetColumnWidth(0, 0);

第一个参数是列 ID,第二个参数是以像素为单位的宽度 (wxListCtrl documentation)。

运行程序后,第一列的标题如我所愿隐藏,但第一列的每一行数据与第二列的每一行数据重叠(未隐藏)。这显然不是我想要的。应隐藏标题第一列的数据。

问题

在wxWidgets 3.0.2中,有没有办法隐藏wxListCtrl的第一列(每行的标题和数据)?

最佳答案

我不相信你可以。您有几个选择。

  1. 使用 DeleteColumn(int columnIndex) 删除列。您不会丢失任何数据,只会丢失数据的显示,因此您可以随时重新插入列并在需要重新添加时重新填充它。显然,如果您的数据过大,这可能会非常耗时。
  2. 根据您的应用程序,首先不要创建列。你没有说为什么你想隐藏它,所以如果你只是不想要它,就不要添加它。
  3. 将您的控件实现为虚拟控件,让您的应用程序控制在何处显示内容。数据显示管理的负担落在您身上,您可以手动完成,但您有更大的灵 active 。继承wxLC_VIRTUAL风格的类并实现OnGetItemText http://docs.wxwidgets.org/3.0/classwx_list_ctrl.html#a92370967f97215e6068326645ee76624

编辑:展开评论问题,如何获取选中项索引:

wxListCtrl 在选择项目时有点奇怪。我确定这与需要支持报告、图标等不同 View 有关。在处理多列报告模式时,您可能会发现只能选择第一列中的项目。如果你在 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

关于c++ - 如何在 wxWidgets 中隐藏 wxListCtrl 的第一列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49269350/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com