- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在编写一个 winforms 应用程序,用户在其中从列表框中选择一个项目并编辑构成关联对象一部分的一些数据。然后将编辑从对象列表应用到基础文件。
在 ASP.Net 中,为列表项分配与用户看到的显示文本不同的系统值是微不足道的。在 winforms 应用程序中,您必须在稍微复杂(并且在 Internet 上不经常相关)的过程中设置每个项目的“Displaymember”和“Valuemember”。
我已经做到了。在 Debug模式下,我已经确认每个项目现在都有一个值,它是显示成员(用户看到的“友好”字符串)和一个键,valuemember,它保存要更新数据的哈希表对象的键存在。
因此,当用户选择要编辑的字符串时,程序应将“ key ”传递给哈希表,提取对象并允许对其进行编辑。
收获?
我看不出有任何明显的方法可以告诉程序查看项目的值成员。我天真地期望它填充列表框的“SelectedValue”属性,但到目前为止这太简单了。那么,我到底如何获得列表项值呢?
最佳答案
同时使用 SelectedIndexChanged
和 SelectedValueChanged
对我不起作用 - ListBox 的
SelectedValue
属性总是无效的。这也让我感到惊讶。
作为一种蹩脚的解决方法,您可以使用 SelectedIndex
直接将对象从 ListBox
中拉出:
public Form1()
{
InitializeComponent();
this.listBox1.DisplayMember = "Name";
this.listBox1.ValueMember = "ID";
this.listBox1.Items.Add(new Test(1, "A"));
this.listBox1.Items.Add(new Test(2, "B"));
this.listBox1.Items.Add(new Test(3, "C"));
this.listBox1.Items.Add(new Test(4, "D"));
this.listBox1.Items.Add(new Test(5, "E"));
}
private void OnSelectedIndexChanged(object sender, EventArgs e)
{
if(-1 != this.listBox1.SelectedIndex)
{
Test t = this.listBox1.Items[this.listBox1.SelectedIndex] as Test;
if(null != t)
{
this.textBox1.Text = t.Name;
}
}
}
(Test
只是一个具有两个属性的简单类 - ID
和 Name
)。
似乎应该有更好的方法,但如果没有别的办法,这应该可行。
关于c# - 如何在 c# winforms 应用程序中获取列表框项目的 "key"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/507354/
我是一名优秀的程序员,十分优秀!