2014-09-11 2 views
0

Не могу поверить, что я избавился от этой маленькой проблемы, пытаясь найти решение, играющее с intellisense. Не повезло, только начиная C# GUI. Просто нужен быстрый ответ, пожалуйста.Как сделать условие из выбранного элемента списка?

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

Что, черт возьми, не так.
Я хочу выполнить инструкции, когда пользователь выбрал пункт «цыпленок» из списка 1.

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(); 
    } 
} 
+0

В чем проблема? –

+0

Показать контекст. Когда этот код работает? – BradleyDotNET

+0

Какая ошибка? Где объявлены тотальные и ord? –

ответ

0

Вам необходимо использовать SelectedItem.

if (listBox1.SelectedItem == "Chicken") 
-2

Первый метод:

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.

+0

В ожидании комментария комментатора – Shaharyar

+0

как я могу сделать эту работу братом? он не работает для меня –

+0

Вы удалили строку? – Shaharyar

1

Вы не можете работать с кодом, так как вы очищаете все параметры перед обработкой заказа. Переместите этот код в самый конец метода 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); 
    } 
} 

Затем добавить продукты к вашему ListBox:

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. Удваивает хорошие научные расчеты, но может легко дать результаты, такие как 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; 
    } 
} 
+0

Спасибо. Я только что начал C#, поэтому я знаю, что мой подход сомнительный –

0

Моя программа бросает NullReferenceException на меня.
на этой строке: if (listBox1.SelectedItem.ToString() == "Chicken $ 15") Мне нужно инициализировать его, я думаю, но я понятия не имею, как инициализировать listBox.

Смежные вопросы