从运行时添加的列表框项中获取字符串[重复]
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 存储了很多属性,让你不需要调用列表框引用。 我只能选择一个答案,而另一个包含不涉及选择的代码(事实证明我也需要),但是这个答案也很有帮助,谢谢!跨度>以上是关于从运行时添加的列表框项中获取字符串[重复]的主要内容,如果未能解决你的问题,请参考以下文章