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

标签 c++ user-interface wxwidgets

上下文

在 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/

相关文章:

c++ - 如何在应用程序中嵌入数据

c++ - 如何在不破坏非事件选择颜色的情况下更改 wxTextCtrl 的背景颜色?

c++ - sizeof std::aligned_storage 实际可用存储大小?

c# - 聚焦 ListBoxItem 不会更新其样式

python - 在 tkinter 中使用类似 GoogleMaps 的按钮

javascript - 使用 Elessar 库将 ID 传递到范围

c++ - 如何将 wxIcon 添加到我的框架应用程序中?

c++ - 使用 `std::future` 的右值引用作为参数是否合法?

c++ - 如何在 C++ 中从数字排序到字母顺序排序

c++ - 使用一元调整大小减小非默认可构造元素的容器大小