C# 列表框项目识别
C# listbox item identification
请记住,我对 C# 不是很有经验。
我正在编写列表框的删除按钮,删除 selected 项目的基本功能有效。
listBoxSum.Items.RemoveAt(listBoxSum.SelectedIndex);
我正在尝试创建一个 IF 语句,它允许我从列表框中 select 一个项目并让它识别其中的文本(很可能是一个字符串)。
由于我对 C# 了解不多,这就是我目前对 if 语句的理解(显然第一行是错误的)。
if (listBoxSum.SelectedItem = "Tea")
{
totalCost = totalCost - teaCost;
txtBox_Amount.Text = totalCost.ToString();
}
我尝试制作其他字符串来帮助简化语句,例如 (下面不是 if 语句的主要代码,上面的代码是。这只是 try 和 extend 的实验使我自己更容易理解的代码):
string teaSelect = "Tea" + teaCost;
string selection = (string) listBoxSum.SelectedItem;
if (selection == teaSelect)
{
totalCost = totalCost - teaCost;
txtBox_Amount.Text = totalCost.ToString();
}
请帮忙,我不知道我是否应该改变我对此的想法,或者它是否是隐藏在众目睽睽下的简单修复。就个人而言,我已经被这个小按钮难住了大约 2 个小时,弄清楚我将如何使删除按钮与计算一起工作。
您要检查的是您当前查看的项目是否为ListBoxItem,如果是,则包含的内容是否为文本,此文本是否等于您想要的文本,以便识别正确的项目.
var content = (((x.SelectedItem as ListBoxItem)?.Content as string);
if (content != null && content == "MyDesiredText") {...}
这将是一个有效的解决方案,但不是一个优雅的解决方案。
更好的方法是在创建列表框项目时记住它们
var desiredListBoxItem = new ListBoxItem(...)
x.AddChild(desiredListBoxItem);
然后,检查对象引用是否匹配:
if (x.SelectedItem == desiredListBoxItem) {...}
如果您没有更新包含 "Tea + cost" 值的项目,您可能应该通过 string.StartsWith 来识别它,或者为它分配您选择的标识符。这可以是一个整数、一个枚举或另一个具有预定义实例的具体 class。
您可以通过为 WPF 使用标签 属性 并为 Windows 表单 (WPF Tag Property) 创建一个简单的 class 来完成此操作。
Windows 表单的一个简单示例是:
enum FoodType
{
Tea = 2
}
class FoodItem
{
public string Text { get; set; }
public FoodType FoodType { get; set; }
public override string ToString()
{
return Text;
}
}
当您添加项目时:
listBoxSum.Items.Add(new FoodItem
{
FoodType = FoodType.Tea,
Text = "Tea " + teaCost
});
当您过滤它们时:
if (listBoxSum.SelectedItem is FoodItem foodItem && foodItem.FoodType == FoodType.Tea)
{
// Do work
}
WPF 更简单:
enum FoodType
{
Tea = 1
}
添加项目:
listBoxSum.Items.Add(new ListBoxItem
{
Content = "Tea " + teaCost,
Tag = FoodType.Tea
});
识别项目:
if (listBoxSum.SelectedItem is ListBoxItem foodItem && foodItem.Tag is FoodType foodType && foodType == FoodType.Tea)
{
MessageBox.Show("hi");
}
所以你在 ListBox
中的项目叫做 "Tea"?如果是你的 if 语句应该是这样的:
if(yourTextBox.Items[yourTextBox.SelectedIndex] == "Tea")
{
//Your Code
}
请记住,我对 C# 不是很有经验。
我正在编写列表框的删除按钮,删除 selected 项目的基本功能有效。
listBoxSum.Items.RemoveAt(listBoxSum.SelectedIndex);
我正在尝试创建一个 IF 语句,它允许我从列表框中 select 一个项目并让它识别其中的文本(很可能是一个字符串)。
由于我对 C# 了解不多,这就是我目前对 if 语句的理解(显然第一行是错误的)。
if (listBoxSum.SelectedItem = "Tea")
{
totalCost = totalCost - teaCost;
txtBox_Amount.Text = totalCost.ToString();
}
我尝试制作其他字符串来帮助简化语句,例如 (下面不是 if 语句的主要代码,上面的代码是。这只是 try 和 extend 的实验使我自己更容易理解的代码):
string teaSelect = "Tea" + teaCost;
string selection = (string) listBoxSum.SelectedItem;
if (selection == teaSelect)
{
totalCost = totalCost - teaCost;
txtBox_Amount.Text = totalCost.ToString();
}
请帮忙,我不知道我是否应该改变我对此的想法,或者它是否是隐藏在众目睽睽下的简单修复。就个人而言,我已经被这个小按钮难住了大约 2 个小时,弄清楚我将如何使删除按钮与计算一起工作。
您要检查的是您当前查看的项目是否为ListBoxItem,如果是,则包含的内容是否为文本,此文本是否等于您想要的文本,以便识别正确的项目.
var content = (((x.SelectedItem as ListBoxItem)?.Content as string);
if (content != null && content == "MyDesiredText") {...}
这将是一个有效的解决方案,但不是一个优雅的解决方案。 更好的方法是在创建列表框项目时记住它们
var desiredListBoxItem = new ListBoxItem(...)
x.AddChild(desiredListBoxItem);
然后,检查对象引用是否匹配:
if (x.SelectedItem == desiredListBoxItem) {...}
如果您没有更新包含 "Tea + cost" 值的项目,您可能应该通过 string.StartsWith 来识别它,或者为它分配您选择的标识符。这可以是一个整数、一个枚举或另一个具有预定义实例的具体 class。
您可以通过为 WPF 使用标签 属性 并为 Windows 表单 (WPF Tag Property) 创建一个简单的 class 来完成此操作。
Windows 表单的一个简单示例是:
enum FoodType
{
Tea = 2
}
class FoodItem
{
public string Text { get; set; }
public FoodType FoodType { get; set; }
public override string ToString()
{
return Text;
}
}
当您添加项目时:
listBoxSum.Items.Add(new FoodItem
{
FoodType = FoodType.Tea,
Text = "Tea " + teaCost
});
当您过滤它们时:
if (listBoxSum.SelectedItem is FoodItem foodItem && foodItem.FoodType == FoodType.Tea)
{
// Do work
}
WPF 更简单:
enum FoodType
{
Tea = 1
}
添加项目:
listBoxSum.Items.Add(new ListBoxItem
{
Content = "Tea " + teaCost,
Tag = FoodType.Tea
});
识别项目:
if (listBoxSum.SelectedItem is ListBoxItem foodItem && foodItem.Tag is FoodType foodType && foodType == FoodType.Tea)
{
MessageBox.Show("hi");
}
所以你在 ListBox
中的项目叫做 "Tea"?如果是你的 if 语句应该是这样的:
if(yourTextBox.Items[yourTextBox.SelectedIndex] == "Tea")
{
//Your Code
}