繁体   English   中英

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

[英]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的第一列(每行的标题和数据)?

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

  1. 使用DeleteColumn(int columnIndex)删除列。 您不会丢失任何数据,仅会丢失数据,因此,如果需要重新添加列,则始终可以重新插入该列并重新填充它。 显然,如果您的数据过大,这可能会很耗时。
  2. 取决于您的应用程序,只是不要首先创建该列。 您没有说为什么要隐藏它,因此,如果您不想要它,请不要添加它。
  3. 将您的控件实现为虚拟控件,从而使您的应用程序可以控制在何处显示内容。 数据显示管理的负担由您来手动完成,但是您具有更大的灵活性。 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM