C#更改现有列表框项中变量的值

C#更改现有列表框项中变量的值,c#,listbox,C#,Listbox,我有一个列表框,其中的项目是一个结构。此结构包含两个字符串。一个用于标题,另一个用于纯文本。现在我想更改列表框中现有项中的文本。有没有办法在不删除现有版本并将更新版本添加到列表中的情况下执行此操作 这就是我想做的 ((TextItemRecord) listbox1.Items[myListbox1.BeforeIndex]).text = "Blablabla"; 当我尝试这样做时,编译器会说,“无法修改取消装箱转换的结果”。有什么解决办法吗 结构 struct TextItemRecord

我有一个列表框,其中的项目是一个结构。此结构包含两个字符串。一个用于标题,另一个用于纯文本。现在我想更改列表框中现有项中的文本。有没有办法在不删除现有版本并将更新版本添加到列表中的情况下执行此操作

这就是我想做的

((TextItemRecord) listbox1.Items[myListbox1.BeforeIndex]).text = "Blablabla";
当我尝试这样做时,编译器会说,“无法修改取消装箱转换的结果”。有什么解决办法吗

结构

struct TextItemRecord
{
    public UInt64 address;
    public string name, text;

    public TextItemRecord(UInt64 address, string name)
    {
        this.address = address;
        this.name = name;
        this.text = "";
    }
    public override string ToString()
    {
        return name;
    }
}

很抱歉,各位,我不知道这个网站应该如何工作。请参阅以下链接。我相信这会澄清一些事情。因为没有提到改变文本的事件触发器,所以我不会假设它。您可以遍历所有项目并调用SelectedIndex属性来更改每个文本,如下所示:

   foreach(var item in listbox1)
        listbox1.Items[item.SelectedIndex] = "Blablabla";

先出结构是值类型而不是引用类型。这意味着更改字段值的唯一方法是使用更改创建一个副本,并替换从中复制的副本。所以,我建议把它改成一个类。另外,由于ListBox使用ToString()方法来显示项目,我建议将其更改为允许显示
text
字段:

class TextItemRecord
{
    public UInt64 address;
    public string name;
    public string text;

    public TextItemRecord(UInt64 address, string name)
    {
        this.address = address;
        this.name = name;
        this.text = "";
    }
    public override string ToString()
    {
        return $"{name} - {text}";
    }
}
现在,要在列表框中显示项目列表,请将DataSource属性分配给列表:

List<TextItemRecord> test;
public Form1()
{
    InitializeComponent();

    test = new List<TextItemRecord>()
    {
        new TextItemRecord(1234, "AAA"),
        new TextItemRecord(5678, "BBB"),
        new TextItemRecord(9012, "CCC")
    };
    listBox1.DataSource = test;
}
列表测试;
公共表格1()
{
初始化组件();
测试=新列表()
{
新TextItemRecord(1234,“AAA”),
新TextItemRecord(5678,“BBB”),
新TextItemRecord(9012,“CCC”)
};
listBox1.DataSource=测试;
}
修改列表框中的项目并显示更改稍微复杂一些。以下是一种有效的方法:

private void AddText(List<TextItemRecord> tirList, int index, string text)
{
    BindingManagerBase bmb = listBox1.BindingContext[test];
    bmb.SuspendBinding();
    test[index].text = text;
    bmb.ResumeBinding();
}
private void AddText(列表、整型索引、字符串文本)
{
BindingManagerBase bmb=listBox1.BindingContext[test];
bmb.SuspendBinding();
测试[索引]。文本=文本;
bmb.ResumeBinding();
}

您需要给我们一些代码来帮助您您好,您可以查看此链接以了解其工作原理,您需要帮助我们来帮助您。请查看可能的副本。如果我理解正确,则值存储在“List test;”中,并且列表框只是一种视觉表示形式。很抱歉,我没有完成键入,并且由于某些原因无法编辑。如果我理解正确,这些值存储在“List test;”中,而列表框只是一种视觉表示。这并不是我想要的方式。我想将项目保存在列表框中。列表作为数据源,列表框将把列表中的项目存储为对象。它将使用ToString()方法表示对象。通过绑定列表,您可以对名称和/或文本进行更改,这些更改将反映在列表框中。