Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/132.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在wxWidgets中隐藏WXLISTCRL的第一列? 上下文 在WxWIDGET(版本3.0.2)C++应用程序中,我试图隐藏WxListCtl的第一列。_C++_User Interface_Wxwidgets - Fatal编程技术网

如何在wxWidgets中隐藏WXLISTCRL的第一列? 上下文 在WxWIDGET(版本3.0.2)C++应用程序中,我试图隐藏WxListCtl的第一列。

如何在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

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

myListCtrl->SetColumnWidth(0, 0);
第一个参数是列ID,第二个参数是以像素为单位的宽度()

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

问题
在wxWidgets 3.0.2中,有没有一种方法可以隐藏WXLISTCRL的第一列(每行的标题和数据)?

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

  • 使用
    DeleteColumn(int-columnIndex)
    删除列。您不会丢失任何数据,只会丢失数据的显示,因此,如果需要重新添加列,您始终可以重新插入列并重新填充它。显然,如果您的数据过大,这可能会很耗时
  • 根据应用程序的不同,首先不要创建列。你不会说“为什么”你想隐藏它,所以如果你只是不想要它,就不要添加它
  • 将控件实现为一个虚拟控件,该控件使应用程序能够控制在何处显示内容。数据显示管理的负担落在您的肩上,由您手动完成,但您有更大的灵活性。使用
    wxLC\u VIRTUAL
    样式继承类,并实现
    OnGetItemText
  • 编辑: 要展开评论问题,请参见如何获取所选项目索引:

    WXLISTCRL对于所选项目来说有点奇怪。我确信这与需要支持报表、图标等不同视图有关。处理多列报告模式时,您可能会发现只能选择第一列中的项目。如果你在Windows上,它应该自动设置为“全行选择”,但我不知道其他操作系统

    无论如何,这里有一个实用程序方法返回第一个选定项(请注意,如果愿意,可以支持多选)

    在该事件处理程序中,获取所选项目并执行需要执行的操作(完全取决于您的应用程序)

    您会注意到,我在这里使用了一个派生类,这使事情变得更简单,但您不必这样做。您可以连接到类似于
    MyMainForm::sqlResults\u selectedChanged
    之类的东西


    实现这一切的方法不止一种,你也可以在这里找到一些好的建议和帮助:

    我认为你做不到。你有几个选择

  • 使用
    DeleteColumn(int-columnIndex)
    删除列。您不会丢失任何数据,只会丢失数据的显示,因此,如果需要重新添加列,您始终可以重新插入列并重新填充它。显然,如果您的数据过大,这可能会很耗时
  • 根据应用程序的不同,首先不要创建列。你不会说“为什么”你想隐藏它,所以如果你只是不想要它,就不要添加它
  • 将控件实现为一个虚拟控件,该控件使应用程序能够控制在何处显示内容。数据显示管理的负担落在您的肩上,由您手动完成,但您有更大的灵活性。使用
    wxLC\u VIRTUAL
    样式继承类,并实现
    OnGetItemText
  • 编辑: 要展开评论问题,请参见如何获取所选项目索引:

    WXLISTCRL对于所选项目来说有点奇怪。我确信这与需要支持报表、图标等不同视图有关。处理多列报告模式时,您可能会发现只能选择第一列中的项目。如果你在Windows上,它应该自动设置为“全行选择”,但我不知道其他操作系统

    无论如何,这里有一个实用程序方法返回第一个选定项(请注意,如果愿意,可以支持多选)

    在该事件处理程序中,获取所选项目并执行需要执行的操作(完全取决于您的应用程序)

    您会注意到,我在这里使用了一个派生类,这使事情变得更简单,但您不必这样做。您可以连接到类似于
    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);