Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / расчет взаимозависимых TextBox / 9 сообщений из 9, страница 1 из 1
24.02.2013, 11:08
    #38163585
dasharocks
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
расчет взаимозависимых TextBox
Добрый день =))
Подскажите, пожалуйста как мне реализовать расчет взаимозависимых TextBox
Существуют 3 поля ввода при изменение которых происходит расчет поля TextBox4

Код расчет поля TextBox4
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
If Not (TextBox2.Text = "") And Not (TextBox3.Text = "") And Not (ComboBox1.Text = "") Then

            
А= (CType(ComboBox1.Text, Double) -
                           CType(TextBox2.Text, Double)) * CType(TextBox3.Text, Double) 
            
TextBox4.Text = Format(Math.Round(А, 3), "##,###0.000")

            
            Exit Sub
        End If


А вот как сделать что бы если изменить числа в поле TextBox4 ?
Происходил расчет поля TextBox3
По формуле

Код: vbnet
1.
2.
3.
4.
5.
Х=  CType(TextBox4.Text, Double)/
((CType(ComboBox1.Text, Double) -
                           CType(TextBox2.Text, Double)) * CType(TextBox2.Text, Double))
           
TextBox3.Text = Format(Math.Round(Х, 3), "##,###0.000")
...
Рейтинг: 0 / 0
25.02.2013, 11:07
    #38164328
фиганыч
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
расчет взаимозависимых TextBox
dasharocks,

ну таки в чём проблема? - вешай обработчик OnChange на TextBox4 и меняй значение TextBox3.

надеюсь от переполнения callstack у тебя перегреется память и твой комп сдохнет в муках.
...
Рейтинг: 0 / 0
25.02.2013, 11:19
    #38164342
Roman Mejtes
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
расчет взаимозависимых TextBox
фиганыч,

там защита от зацикливания стоит к сожалению :)
...
Рейтинг: 0 / 0
25.02.2013, 11:23
    #38164348
фиганыч
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
расчет взаимозависимых TextBox
Roman Mejtes,

мля, а счастье было так близко...
...
Рейтинг: 0 / 0
25.02.2013, 12:34
    #38164485
pation
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
расчет взаимозависимых TextBox
dasharocks,

1. не производи вычислений в представлении, производи в модели (уровне бизнес логике)
2. используй биндинги
3. будет тебе счастье
...
Рейтинг: 0 / 0
25.02.2013, 13:01
    #38164538
Varcom
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
расчет взаимозависимых TextBox
dasharocks,

Я в таких случаях использую свои Silent компоненты
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
public class SilentTextBox : TextBox
{
  private bool silentMode;

  public SilentTextBox()
    : base()
  {
  }

  public void SilentSetText(string value)
  {
    silentMode = true;
    try
    {
      Text = value;
    }
    finally
    {
      silentMode = false;
    }
  }

  protected override void OnTextChanged(EventArgs e)
  {
    if (!silentMode)
      base.OnTextChanged(e);
  }
}


Если нужно программно заполнить текстовое поле, вызываю метод SilentSetText. В этом случае событие TextChanged не срабатывает, и не тянет за собой циклический пересчет взаимозависимых текстовых полей.
...
Рейтинг: 0 / 0
25.02.2013, 13:37
    #38164625
Roman Mejtes
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
расчет взаимозависимых TextBox
Varcom,

вот в таком примере зацикливания не будет (события обрабатываются соответственно имени объекта)
private void textBox1_TextChanged(object sender, EventArgs e)
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
        {
            textBox2.Text = textBox1.Text;
        }

        private void textBox2_TextChanged(object sender, EventArgs e)
        {
            textBox1.Text = textBox2.Text;
        }


такой уже недопустим
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
        private void textBox1_TextChanged(object sender, EventArgs e)
        {
            textBox2.Text = textBox1.Text + "1";
        }

        private void textBox2_TextChanged(object sender, EventArgs e)
        {
            textBox1.Text = textBox2.Text + "2";
        }
...
Рейтинг: 0 / 0
25.02.2013, 13:56
    #38164675
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
расчет взаимозависимых TextBox
Парни, откройте для себя TextBoxBase.Modified Property
...
Рейтинг: 0 / 0
25.02.2013, 14:07
    #38164697
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
расчет взаимозависимых TextBox
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
private const string format = "n3";
private readonly IFormatProvider provider = new NumberFormatInfo { NumberDecimalSeparator = ".", NumberGroupSeparator = "," };

private Double Parse(string value)
{
    return String.IsNullOrWhiteSpace(value) ? 0.0 : Double.Parse(value, provider);
}

private void OnSomethingChanged(object sender, EventArgs e)
{
    // Игнорируем изменения, сделанные нашим кодом, а не пользователем
    if (sender is TextBox && !((TextBox)sender).Modified)
    {
        return;
    }

    double one, two, three, four, x;

    if (textBox4.Modified)
    {
        one = Parse(textBox1.Text);
        two = Parse(textBox2.Text);
        four = Parse(textBox4.Text);

        x = four / (one - two * two);

        textBox3.Text = x.ToString(format, provider);
        textBox4.Modified = false;
    }
    else
    {
        one = Parse(textBox1.Text);
        two = Parse(textBox2.Text);
        three = Parse(textBox3.Text);

        x = (one - two) * three;

        textBox4.Text = x.ToString(format, provider);
    }
}
...
Рейтинг: 0 / 0
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / расчет взаимозависимых TextBox / 9 сообщений из 9, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]