C# одно событие для нескольких текстовых полей - PullRequest
0 голосов
/ 23 февраля 2020

У меня есть textbox4 = textbox1 + textbox2 + textbox3. Я хочу, чтобы textbox1 или textbox2 или textbox3 изменили значение textbox4 auto show. У меня есть код:

 private void textbox1_TextChanged(object sender, TextChangedEventArgs e)
    {
        try
        {
            textbox4.Text = ((float.Parse(textbox1.Text) + float.Parse(textbox2.text)+ float.Parse(textbox3.text)).ToString();

        }
        catch 
        {

        }

    }
 private void textbox1_TextChanged(object sender, TextChangedEventArgs e)
    {
        try
        {
           textbox4.Text = ((float.Parse(textbox1.Text) + float.Parse(textbox2.text)+ float.Parse(textbox3.text)).ToString();

        }
        catch 
        {

        }

    }
 private void textbox1_TextChanged(object sender, TextChangedEventArgs e)
    {
        try
        {
           textbox4.Text = ((float.Parse(textbox1.Text) + float.Parse(textbox2.text)+ float.Parse(textbox3.text)).ToString();

        }
        catch 
        {

        }

    }

Теперь я хочу сделать это проще. Сократите код. Объявите акцию только 1 раз. Например: textbox1 или textbox2 или textbox3 изменяет напряженное textbox4 = textbox1 + textbox2 + textbox3

Ответы [ 2 ]

0 голосов
/ 23 февраля 2020

Я бы заставил первые три текстовых поля совместно использовать TextChangedEventHandler и установить для textBox4 значение IsReadOnly = True в этом случае.

private void textbox_TextChanged(object sender, TextChangedEventArgs e)
{
    try
    {
        float float1 = 0, float2 = 0, float3 = 0;
        if (float.TryParse(textBox1.Text, float1) && 
            float.TryParse(textBox2.Text, out float2) && 
            float.TryParse(textBox3.Text, out float3)) 
        {
            textBo4.Text = (float1 + float2 + float3).ToString();
        }
        else 
        {
            textBox4.Text = "";
        }
    }
    catch 
    {
        textBox4.Text = "";
    }
}
0 голосов
/ 23 февраля 2020

Этого можно добиться, выполнив:

1) Напишите новый метод для события, подобный этому:

private void UpdateTextOnTextBox(object sender, TextChangedEventArgs e)
{
   try
   {
     textbox4.Text = ((float.Parse(textbox1.Text) + float.Parse(textbox2.text)+ float.Parse(textbox3.text)).ToString();

   }
   catch (Exeption ex)
   {
     textbox4.Text = ex.Message;
   }

}

2) Удалите предыдущие методы и оставьте только новый

3) Повторно прикрепите событие для каждого текстового поля (Окно свойств> События> в TextChanged выберите: UpdateTextOnTextBox

Наслаждайтесь

...