如何从所选列表框项目中生成条件
本文关键字:项目 条件 列表 | 更新日期: 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";
}
同时声明total
为decimal
。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
条件的原因。