更改 nana 列表框中的值

Posted

技术标签:

【中文标题】更改 nana 列表框中的值【英文标题】:Change value in nana listbox 【发布时间】:2017-07-07 19:47:42 【问题描述】:

我正在尝试使用属性网格(名称:值对的网格)创建一个 GUI

列表框小部件似乎是开始的方式。 (如果有更好的东西,请纠正我)

我编写的代码(如下)编译并运行。初始名称/值对显示正常,但尝试更改第一项的值没有任何结果。

我查看了几个列表框示例,但找不到一个简单的方法来更改列表框中的值一旦初始化

int main()

using namespace nana;

// form to hold everything
form fm;

// listbox to be the property grid
listbox lb(fm, nana::rectangle(10, 10, 280, 120));

// column headers
lb.append_header("Name", 200);
lb.append_header("Value", 200);

// add two items to the default category
lb.at(0).append("A", "0");
lb.at(0).append("B", "0");

// change value of A item to 32 ( fails to do anything )
lb.at(listbox::index_pair(0,1)).value("32");

fm.show();
exec();

也试过(不编译)

lb.at(listbox::index_pair(0,1)).value("A","32");

and (运行,没有效果)

lb.anyobj(0, 0, "32");

【问题讨论】:

【参考方案1】:

您正在使用非常低级的函数。有more convenient higth level functions 可以设置/更改列表框中的值/文本/项目(使用STL containers 或resolvers)。

假设您想使用这些低级功能,因为您想实现自己的高级 API,以下是一些事实:

您使用at(index_pair) 访问的item_proxyvalue 函数将使您能够访问您之前附加到该项目的某些对象。您没有附加任何对象。您可以有效地首先附加一个对象,或者您可以继续直接使用文本。最简单的“hack”是使用函数文本:lb.at(listbox::index_pair(0,1)).text(1,"32"),它为该项目的第 1 列设置文本。

编辑:一个相对简单易懂的解释:3-methods-to-insert-data-into-listbox

【讨论】:

有效。谢谢你。 “有更方便的高级功能”它们叫什么?他们的文档在哪里?有使用它们的简单介绍性示例吗?更新:刚刚找到sourceforge.net/p/nanapro/blog/2016/04/preview-of-listbox-model 感谢您提供文档链接。我一直在处理这些。他们工作得很好。但是,我对它们的复杂性和难以理解性有疑问。在我看来,简单地传递对 STL 容器的引用更容易理解和实现。所以我回去做那件事。见github.com/JamesBremner/nana_property_grid

以上是关于更改 nana 列表框中的值的主要内容,如果未能解决你的问题,请参考以下文章

Csharp:根据组合框中的值加载选中的项目列表

MS Access 2013 - 根据文本框中的值过滤列表框中的值

使用组合框中的值编辑从列表框中选择的记录中的字段

如何将列表中的值分配给熊猫数据框并控制每个列表元素在数据框中的分布/频率

如何更改列表框中的所有项目

想要文本框中的向上和向下箭头来更改列表框选择