如何从所选列表框项目中生成条件

本文关键字:项目 条件 列表 | 更新日期: 2023-09-27 18:21:37

我不敢相信我被这个小问题弄得筋疲力尽,因为我试图找到使用intellisense的解决方案。运气不好,只是启动了c#GUI。只需要一个快速的答案。

if (listBox1.SelectedValue== "Chicken")
{
    total += 15;
    ord += " Chicken";
    label4.Text = "chicken selected";
}

这到底是怎么回事
当用户从listbox1中选择项目"chicken"时,我想执行这些语句。

public partial class Form1 : Form
{
    double total = 0;
    int x = 0;
    string ord = "";
    private void placeToolStripMenuItem_Click(object sender, EventArgs e)
    {
        checkBox1.Checked = false;
        radioButton1.Checked = false;
        radioButton2.Checked = false;
        radioButton3.Checked = false;
        radioButton4.Checked = false;
        listBox1.SelectedItems.Clear();
        if (checkBox1.Checked)
        {
            total += 1;
            ord += " Water";
        }
        if (checkBox1.Text == "Extra Meat")
        {
            total += 1;
            ord += ord+" Extra Meat ";
        }
        if (comboBox1.Text == "Extra Rice")
        {
            total += 1;
            ord += " Extra Rice";
        }
        if (comboBox1.Text == "Extra Veggies")
        {
            total += 1;
            ord +=" Extra Veggies";
        }
        if (listBox1.SelectedValue== "Chicken")
        { 
            total+=15;
            ord+=" Chicken";
            label4.Text = "chicken selected";
        }
        if (listBox1.Text == "Pizza    $8")  //< my pathetic attempt to figure it out with intelisense
        { 
            total+=8;
            ord+="Pizza ";
            label4.Text = "qwe";
        }
        if (listBox1.SelectedItem == "Spaghetti     $12")//< my pathetic attempt to figure it out with intelisense
        { 
            total+=12;
            ord+=" Spaghetti";
        }
        if (listBox1.SelectedItem == "Fries              $8")
        { 
            total+=8;
            ord+=" Fries";
        }
        if (listBox1.SelectedItem == "Burger          $10")
        { 
            total+=10;
            ord+=" Burger";
        }
        //radiobutton
        if (radioButton1.Checked)
        { 
            total+=5;
            ord += " Pineapple Juice";
        }
        if (radioButton2.Checked)
        {
            total+=6;
            ord += " Mango Juice";
        }
        if (radioButton3.Checked)
        {
            total+=7;
            ord += " Apple Juice";
        }
        if (radioButton4.Checked)
        {
            total+=8;
            ord += " Orange Juice";
        }
        MessageBox.Show("Order Done");
    }
    private void clearToolStripMenuItem_Click(object sender, EventArgs e)
    {
        ord = "";
        total = 0;
    }
    private void displayToolStripMenuItem_Click(object sender, EventArgs e)
    {
        MessageBox.Show("Order: " + ord+"'nTotal: "+total);
    }
    private void exitToolStripMenuItem_Click(object sender, EventArgs e)
    {
        this.Close();
    }
}

如何从所选列表框项目中生成条件

您的代码无法工作,因为您在处理订单之前清除了所有选择。将此代码移动到placeToolStripMenuItem_Click方法的最后:

// Process the order here ...
MessageBox.Show("Order Done");
checkBox1.Checked = false;
radioButton1.Checked = false;
radioButton2.Checked = false;
radioButton3.Checked = false;
radioButton4.Checked = false;
listBox1.SelectedItems.Clear();

我认为你的做法是错误的。您不应该做出所有这些if-语句。相反,创建Product

public class Product
{
    public string Name { get; set; }
    public decimal Price { get; set; }
    public override ToString()
    {
        return String.Format("{0}    ${1}", Name, Price);
    }
}

然后将产品添加到您的列表框中:

listbox1.Items.Add(new Product{ Name = "Chicken", Price = 15 });
listbox1.Items.Add(new Product{ Name = "Pizza", Price = 8 });
...

然后你可以使用这样的选择项目:

var product = listBox1.SelectedItem as Product;
if (product != null) {
    total += product.Price;
    ord += " " + product.Name;
    label4.Text = product.Name + " selected";
}

同时声明totaldecimal。Double有利于科学计算,但可以很容易地得到像7.49999999而不是7.5这样的结果。小数已经被引入,特别是在货币计算中。它们不是很快,但它们不会在内部将十进制数字转换为二进制数字,而是保留了十进制数字。二进制数的问题是,例如1/10不能准确地表示,就像1/3不能在十进制中准确地表示一样。


你甚至可以将产品添加到你的单选按钮

radioButton3.Tag = new Product{ Name = "Apple Juice", Price = 7 };

一个更高级的方法是使用Product属性创建自己的单选按钮控件,但该解决方案目前可以做到这一点。

然后你可以像这个一样循环浏览所有的单选按钮

foreach (var radioButton in Controls.OfType<RadioButton>()) {
    if (radioButton.Checked) {
        var p = (Product)radioButton.Tag;
        total += p.Price;
        ord += " " + p.Name;
    }
}

您需要使用SelectedItem。

if (listBox1.SelectedItem == "Chicken")

我的程序正在向我抛出Nullreferenceexception。
在这条线上:if(listBox1.SelectedItem.ToString()=="鸡肉$15")我想我必须初始化它,但我不知道如何初始化listBox。

第一种方法:

if (listBox1.SelectedIndex != -1)    //first check if any item is selected
    if (listBox1.SelectedItem.ToString() == "Chicken")

第二种方法:

if (listBox1.Text == "Chicken")

只删除行:

private void placeToolStripMenuItem_Click(object sender, EventArgs e)
    {
        listBox1.SelectedItems.Clear();    //remove this line

它会清除您选择的项目,这就是为什么您没有进入任何if条件的原因。