从运行时添加的列表框项中获取字符串[重复]

Posted

技术标签:

【中文标题】从运行时添加的列表框项中获取字符串[重复]【英文标题】:Getting a string from a listbox item added during runtime [duplicate] 【发布时间】:2020-03-23 06:42:51 【问题描述】:

我有一个列表框,上面有一个项目,然后它可以被从文本框中输入的文本中提取的几个项目(单词)替换。它们添加了listbox.Items.Add(word)。 我希望能够在它们被选中时将列表框中的这些单词转换回字符串(这样我就可以用它们做其他事情),但是我遇到了两个我不确定如何处理的问题:

    选择原始项目时出现异常:

System.NullReferenceException: '对象引用未设置为 对象的实例。'

当使用string s = ((ListBoxItem)listbox.SelectedItem).Content.ToString();

"System.NullReferenceException: '对象引用未设置为 对象的实例。'

System.Windows.Controls.Primitives.Selector.SelectedValue.get 返回 空。”

当使用string s = listbox.SelectedValue.ToString();

    当任何新项目被选中时,什么都不会发生。我认为这是因为事件处理程序仅附加到开始时列表中的单个项目,但我不确定如何将其应用于尚不存在的项目。选择列表框中的任何项目时是否有事件处理程序?

任何帮助将不胜感激,在此先感谢您。

【问题讨论】:

I assume this is because the event handler is only attached to the single item that's on the list in the beginning - 你在使用列表框SelectionChanged 事件吗?那么情况就不是这样了。 使用它确实解决了这两个问题,谢谢! 【参考方案1】:

你可以试试这个,你可以在你的列表框中测试一个元素的选择:

 private void youListBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
 
     if(yourListBox.SelectedItem != null)
     
        ....
     
 

【讨论】:

【参考方案2】:

您应该收听SelectionChanged 事件。见下文

        public MainWindow()
        
            InitializeComponent();

            ListBox.Items.Add("Word1");
            ListBox.Items.Add("Word2");
            ListBox.Items.Add("Word3");
            ListBox.Items.Add("Word4");

            ListBox.SelectionChanged += ListBox_SelectionChanged;
        

        private void ListBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
        
            var listBoxValue = ListBox.SelectedValue.ToString();
            Console.WriteLine(listBoxValue);
        

【讨论】:

更简单。 SelectionChangedEventArgs 存储了很多属性,让你不需要调用列表框引用。 我只能选择一个答案,而另一个包含不涉及选择的代码(事实证明我也需要),但是这个答案也很有帮助,谢谢!跨度>

以上是关于从运行时添加的列表框项中获取字符串[重复]的主要内容,如果未能解决你的问题,请参考以下文章

从后面的代码中添加组合框项。 [WPF]

如何动态更改winforms列表框项的字体?

使用正则表达式从python中的列表项中删除子字符串

如何将 ARGB 值绑定到组合框项中的矩形填充属性?

调试断言失败,字符串下标超出范围

如何从选定的 ListBox Control 的 listboxitem 中获取属性? C#