listBox_groupmakingrepairs是我表单上的列表框控件。首次加载表单时,列表框中没有选择任何内容,并且以下“if”语句中的代码将运行,因为条件为真。
if (listBox_groupmakingrepairs.Text == "")
{
Error = "You must indicate what group will be making the repairs.";
Con = listBox_groupmakingrepairs;
}
但是,如果我运行以下代码......
listBox_groupmakingrepairs.Text = "Cell";
遵循此代码...
listBox_groupmakingrepairs.ClearSelected();
列表框中没有选择任何内容,但它会导致上面的第一个代码段为false,而不会运行“if”块中的代码。当我单步执行并检查'listBox_groupmakingrepairs.Text'的值时,它是“Cell”。然而在表格上,列表框显然没有选择任何内容。
我是否错误地使用了Listbox控件的Text属性?或者这是一个错误?或者我错过了一些完全明显的东西?
我看到它的方式我有一个似乎在大多数情况下运作良好的属性(文本)。但在某些情况下,它会返回一个不再是正确值的值。为什么Text属性返回一个后来改变的旧值?对于任何可以向我解释的人来说,这是否合乎逻辑?
答案 0 :(得分:0)
这是因为C#winform控件的 ListBox 控件分别处理 Text 属性和 SelectedItem ,但是在一起。
它的工作方式如下:
IF [SelectedItem is True i.e. Item is selected] THEN
Text property = SelectedItem.ToString()
ELSE IF [SelectedItem is False i.e. No Item is selected] THEN
Text Property will still assume its current value (or in a way previous value) unless its manually reset
所以总是在这种情况下不要忘记重置文本属性。希望这会有所帮助...
答案 1 :(得分:0)
也许我有点慢,但最终我意识到微软是创造者,所以对他们来说,我会寻求答案。
这是我发现的:
根据Microsoft,我使用的以下代码是在列表框控件中选择文本的正确方法。
listBox_groupmakingrepairs.Text = "Cell";
然后,同样根据Microsoft,我使用的以下代码是取消选择列表框中所有项目的正确方法。
listBox_groupmakingrepairs.ClearSelected();
最后,根据比尔盖茨的说法(见上面的两个链接),Text属性也是检索第一个选定项目文本的正确方法。
string SelectedText = listBox_groupmakingrepairs.Text;
但是,正如我在上面的原始问题中所描述的那样,当我在列表框中选择时没有选择Text属性时,它包含文本。但微软称“这个属性会返回第一个选定项目的文本。”这是假的。它应该返回null,因为没有选择...但它返回了未选择的文本。
所以在原帖中回答我的两个问题:
“我是否错误地使用了Listbox控件的Text属性?” - 答案是肯定的。
“或者这是一个错误吗?” - 是的,是的。