Обработчики событий в приложении My Converter не работают - PullRequest
1 голос
/ 19 мая 2011

Это код, который у меня есть:

public partial class Form2 : Form
{
    public Double X;

    public Form2()
    {
        InitializeComponent();
    }


    private void button2_Click(object sender, EventArgs e)
    {
        if(textBox1.Text != "")
        X = Convert.ToDouble(textBox1.Text);
        X *= 0.001;
        label3.Text = "metros";
    }


    private void button3_Click(object sender, EventArgs e)
    {
        if (textBox1.Text != "")
        X = Convert.ToDouble(textBox1.Text);
        X *= 0.62;
        label3.Text = "milhas";
    }

    private void button4_Click(object sender, EventArgs e)
    {
        if (textBox1.Text != "")
        X = Convert.ToDouble(textBox1.Text);
        label3.Text = "quilómetros";
    }

    private void button5_Click(object sender, EventArgs e)
    {
        if (textBox1.Text != "")
        X = Convert.ToDouble(textBox1.Text);
        X *= 3280,84;
        label3.Text = "pés";
    }

    private void button6_Click(object sender, EventArgs e)
    {
        if (textBox1.Text != "")
        X = Convert.ToDouble(textBox1.Text);
        X *= 0.17998560115190784737;
        label3.Text = "léguas";
    }

    private void button1_Click(object sender, EventArgs e)
    {

        textBox2.Text = Convert.ToString(X);

    }

Вот так выглядит окно: Active Form

Что они делают, когда вы вставляете значение в textBox1(красный в середине слева от окна), затем вы выбираете измерение с помощью кнопок справа, это преобразует введенное значение в километры, сохраняет его в переменной X и записывает выбранное измерение на метке всправа от textBox1.

Когда вы нажимаете кнопку «Конвертер», (на данный момент) я хотел, чтобы textBox2 показывал X, однако это работает только тогда, когда я нажимаю «metros» или «pés», если явыберите одну из других кнопок для конвертации, она просто ничего не сделает ...

Кто-нибудь имеет представление о том, что не так?

А также, дополнительный вопрос, как выбрать элементы изполе со списком?

1 Ответ

2 голосов
/ 19 мая 2011

Во-первых, операторы if выполняют только следующий оператор, если выполняется их условие:

if(textBox1.Text != "")
X = Convert.ToDouble(textBox1.Text);  // only run if 'if' is true
X *= 0.001;                           // always run
label3.Text = "metros";               // always run

If связано со следующей строкой. Если вы хотите, чтобы весь следующий код был связан с if, то вам нужно открыть блок:

if(textBox1.Text != "")
{
   X = Convert.ToDouble(textBox1.Text);
   X *= 0.001;
   label3.Text = "metros";
}

Чтобы избежать этого, я бы посоветовал использовать согласованный стиль для однострочных if операторов:

if (something) SomeStatement(); // same line

if (something)
    SomeStatement(); // indented

if (something)
{
    SomeStatement(); // single statement block
}

Возможно, некоторые из ваших кнопок не работают, потому что связь между методами обработчика событий и событиями нарушена. Вы должны открыть конструктор и убедиться, что каждой кнопке назначен обработчик Click.

Что касается части вашего поля со списком: ComboBox.SelectedItem позволяет вам получить или установить выбранный пункт. В качестве альтернативы вы можете использовать ComboBox.SelectedIndex, чтобы получить или установить индекс выбранного элемента.

...