【问题标题】:C# listbox item identificationC# 列表框项标识
【发布时间】:2019-02-01 07:46:22
【问题描述】:

请记住,我对 c# 不是很有经验。

我正在为列表框编写一个删除按钮,删除所选项目的基本功能有效。

listBoxSum.Items.RemoveAt(listBoxSum.SelectedIndex);

我正在尝试创建一个 IF 语句,它允许我从列表框中选择一个项目并让它识别其中的文本(很可能是一个字符串)。

由于我对 c# 不太了解,这就是我目前的 if 语句(显然第一行是错误的)。

if (listBoxSum.SelectedItem = "Tea")
        {
            totalCost = totalCost - teaCost;
            txtBox_Amount.Text = totalCost.ToString();
        }

我尝试制作其他字符串来帮助简化语句,例如 (下面不是 if 语句的主要代码,上面的代码是。这只是尝试和扩展代码的实验这对我自己来说更容易理解):

       string teaSelect = "Tea" + teaCost;
       string selection = (string) listBoxSum.SelectedItem;

       if (selection == teaSelect)
       {
            totalCost = totalCost - teaCost;
            txtBox_Amount.Text = totalCost.ToString();
       }

请帮忙,我不知道我是否应该改变我对这个问题的看法,或者它是否可以轻松解决。就我个人而言,我已经被这个小按钮难倒了大约 2 个小时,我想弄清楚我将如何使删除按钮与计算一起工作。

【问题讨论】:

  • 如何填写列表?
  • List 控件实际上可以存储 anything 因此而不是文本(我猜),如果它存储了一个包含名称和成本的具体类型,那么保存起来会更容易数据在一起。 List<T> 作为数据源将是最好的选择
  • if (listBoxSum.SelectedItem = "Tea" 应该有 2 个 == 符号。不确定这是否是一个错字。此外,您需要用简单的英语告诉我们您的代码应该做什么,以便我们提供帮助。
  • @Grantly 在我的主表单上,我有您选择的按钮,即茶、拿铁、热巧克力等。从这里开始,列表框开始填满,代码是:// Set cost teaCost = 3.50m; //显示金额为总金额 totalCost = totalCost + teaCost; txtBox_Amount.Text = totalCost.ToString();
  • @Grantly listBoxSum.Items.Add("Tea " + teaCost);这是用于填写列表的内容,我之前输入了错误的部分

标签: c# if-statement listbox selecteditem


【解决方案1】:

您要检查的是您当前正在查看的项目是否是 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) {...}

【讨论】:

    【解决方案2】:

    如果您不更新包含“Tea + cost”值的商品,您可能应该通过 string.StartsWith 来识别它,或者使用您选择的标识符对其进行分配。这可以是一个整数、一个枚举或另一个具有预定义实例的具体类。

    您可以通过使用 WPF 的 Tag 属性并为 Windows 窗体 (WPF Tag Property) 创建一个简单的类来做到这一点。

    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");
    }
    

    【讨论】:

      【解决方案3】:

      所以你在ListBox 中的项目叫做“Tea”?如果是你的 if 语句应该是这样的:

      if(yourTextBox.Items[yourTextBox.SelectedIndex] == "Tea")
      {
          //Your Code
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-09-20
        • 2021-12-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多