1 Востаннє редагувалося marketesh (29.09.2015 21:41:50)

Тема: Окреме виконання коду

Прошу пробачення. Написав програмку, та ось проблема: коли вводити у textBox1.Text дані, то виходять глюки, оскільки програма також виконує дію із запрограмованого textBox2. Запитання: як зробити так, щоб код обох текстових полів виконувався окремо. Дякую
У прикріпленому файлі програмка

private void textBox1_TextChanged(object sender, EventArgs e)
{
    double a, b, c;
    if (textBox1.Text != "")
    {
        a = Convert.ToDouble(textBox1.Text);
        b = Convert.ToDouble(textBox3.Text);
        c = a / b;
        c = Math.Round(c,2);
        textBox2.Text = Convert.ToString(c);
    }
}

private void textBox2_TextChanged(object sender, EventArgs e)
{
    double a, b, c;
    if (textBox2.Text != "")
    {
        a = Convert.ToDouble(textBox2.Text);
        b = Convert.ToDouble(textBox3.Text);
        c = a * b;
        c = Math.Round(c,2);
        textBox1.Text = Convert.ToString(c);
    }
}
Post's attachments

lesson_11.rar 4.01 kb, 312 downloads since 2015-09-29 

2

Re: Окреме виконання коду

Телепатично бачу, що в формі виставлено один обробник в двох функцій.

3

Re: Окреме виконання коду

Прошу пробачення, але я нічого не зрозумів. Поясніть, будь ласка

koala написав:

Телепатично бачу, що в формі виставлено один обробник в двох функцій.

4 Востаннє редагувалося koala (29.09.2015 22:03:16)

Re: Окреме виконання коду

Вибачте, не фунцій, подій.
У вас є форма. В ній є два об'єкти TextBox. В них є подія (Event) TextChanged. І на обох подіях вказана одна функція-обробник, а мають бути різні.

5 Востаннє редагувалося marketesh (29.09.2015 22:16:21)

Re: Окреме виконання коду

Koala, хотілося б щоб конвертер працював в обидва боки (і з гривні в долар і з долара в гривні), тому в обох текстбоксах і стоїть TextChanged. Що можете порадити по цьому?
Просто коли вводиш у текстове поле для долара числа, то конвертація проходить нормально, а коли в поле гривні, то воно конвертує і гривні, оскільки (я так думаю) код текстового поля 1-го написаний перед кодом текстового поля 2-го і відповідно виконується й код другого текстового поля, який конвертує дані у текстовому полі 1

6

Re: Окреме виконання коду

Ну от знову вам телепати потрібні. Звідки ми тут знаємо, яке поле у вас для гривні, а яке для долара (і що таке "долар числа")?

7 Востаннє редагувалося marketesh (29.09.2015 22:26:32)

Re: Окреме виконання коду

фото

Post's attachments

Урок_11.jpg 80.21 kb, 200 downloads since 2015-09-29 

8

Re: Окреме виконання коду

Я б робив так(це перше, що спало на думку):

  • 1 обробник на два текстові поля(грн і $)

  • в якому для визначення активного поля вводу використовуємо змінну якусь/властивість Tag/(sender as TextBox).Focused

  • в залежності від поля, яке зараз у фокусі(тобто вводяться дані) робити відповідні дії конвертування

Подякували: marketesh, leofun012

9

Re: Окреме виконання коду

Дякую. Чи не можна було б написати приблизно, як воно має виглядіти. Суть я зрозумів, але у цьому я ще погано плаваю

10

Re: Окреме виконання коду

Все, дійшло. Ви обробляєте зміну тексту одного поля, при цьому змінюєте текст іншого. Але від зміни цього тексту знову запускається обробник, який змінює перший текст - і так, поки черговий цикл не залишить обидва поля однаковими. Як виходити з ситуації? Варіанти:
- перевіряти не зміну рядка, а натискання клавіші - найпростіше, але нелогічно;
- додати змінну форми - семафор, і перевіряти її значення перед внесенням змін до текстових полів (якщо стоїть 1, значить, вже хтось змінює) - трохи складніше, логічно, але код буде брудним;
- перейти на дизайн MVC (модель - відображення - контроллер): контроллер ініціює зміни в моделі, зміни в моделі змінюють зовнішній вигляд, зміни зовнішнього вигляду ні на що не впливають. Найкоретніший (і в цьому випадку - найскладніший) спосіб. Зате якщо у вас буде 50 полів, то цей спосіб стає найлегшим.

Подякували: marketesh1

11

Re: Окреме виконання коду

marketesh написав:

Дякую. Чи не можна було б написати приблизно, як воно має виглядіти. Суть я зрозумів, але у цьому я ще погано плаваю

Будь ласка

Post's attachments

Converter.rar 45.66 kb, 323 downloads since 2015-09-30 

Подякували: marketesh1

12

Re: Окреме виконання коду

Дякую, та проблема не вирішена. Код нормально працює і так, якщо в ньому немає ось цієї стрічки

c = Math.Round(c,2);

саме вона приводить до такого "глюку" і тільки тоді, коли дані вводиш у textBox1, а не в textBox2.