динамическое создание элемента

В данном примере, пользователь вводит данные, нажимает на кнопку Расчитать. Создается кнопка Очистить. При нажатии на кнопку Очистить, поля ввода очищаются, кнопка Очистить удаляется.
Был сделан эффект плавного увеличения и уменьшения формы, когда кнопка создается и когда удаляется.
Но возникло одно досадное недоразумение. Если пользователь не закроет форму, а второй раз введет данные, нажмет кнопку Расчитать, затем кнопку Очистить, после удаления кнопки, форма дважды изменит свои размеры. Если пользователь три раза сделает вычисления, то форма трижды изменит свои размеры. В чем bug, ни как не пойму.
Скрыть

Показать

Копировать
  Counter.cs  
  • using System;
  • using System.Collections.Generic;
  • using System.Linq;
  • using System.Text;
  • using System.Threading.Tasks;
  •  
  • namespace _0024 {
  •  class Counter {
  •   ushort showStart;
  •   ushort showEnd;
  •   decimal price;
  •   public Counter(string arg0, string arg1, string arg2) {
  •    ushort.TryParse(arg0, out showStart);
  •    ushort.TryParse(arg1, out showEnd);
  •    decimal.TryParse(arg2, out price);
  •   }
  •   public ushort ResultShow() {
  •    return (ushort)(showEnd - showStart);
  •   }
  •   public decimal Sum() {
  •    return Math.Round((decimal)(ResultShow() * price) , 2);
  •   }
  •  }
  • }
Скрыть

Показать

Копировать
  Form1.cs  
  • using System;
  • using System.Collections.Generic;
  • using System.ComponentModel;
  • using System.Data;
  • using System.Drawing;
  • using System.Linq;
  • using System.Text;
  • using System.Threading.Tasks;
  • using System.Windows.Forms;
  •  
  • namespace _0024 {
  •  public partial class Form1 : Form {
  •   //создаем кнопку Очистить
  •   Button Clear = new Button();
  •   public Form1() {
  •    InitializeComponent();
  •   }
  •   private void button1_Click(object sender, EventArgs e) {
  •    Counter C = new Counter(textBox1.Text, textBox2.Text, textBox3.Text);
  •    textBox4.Text = C.Sum().ToString();
  •    //увеличиваем размеры формы
  •    int width = 432;
  •    while(width < 562) {
  •     //итерация
  •     width += 1;
  •     this.ClientSize = new System.Drawing.Size(width, 274);
  •     //остановка потока на 0,01секунды
  •     System.Threading.Thread.Sleep(10);
  •     //прекращаем увеличивать размеры формы
  •     if(width == 562) {
  •      break;
  •     }
  •    }
  •    //задаем параметры кнопки Очистить
  •    Clear.Font = new System.Drawing.Font("Microsoft Sans Serif", 10F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204)));
  •    Clear.Location = new System.Drawing.Point(437, 37);
  •    //Clear.Name = "button2";
  •    Clear.Size = new System.Drawing.Size(100, 30);
  •    Clear.Text = "Очистить";
  •    Clear.UseVisualStyleBackColor = true;
  •    //добавляем кнопку Очистить в коллекцию элементов управления формы
  •    this.Controls.Add(Clear);
  •    //добавляем обработчик события в список обработчиков событий
  •    Clear.Click += new EventHandler(Clear_Click);
  •   }
  •   //обработчик события для кнопки Очистить
  •   protected void Clear_Click(object sender, EventArgs e) {
  •    //кнопка Очистить очищает все текстовые поля
  •    foreach(Control i in Controls) {
  •     if(i.GetType() == typeof(TextBox)) {
  •      i.Text = string.Empty;
  •     }
  •    }
  •    //удаляем кнопку Очистить из коллекции элементов управления формы
  •    this.Controls.Remove(Clear);
  •    //уменьшаем размеры формы
  •    int width = 562;
  •    while(width > 432) {
  •     //итерация
  •     width -= 1;
  •     this.ClientSize = new System.Drawing.Size(width, 274);
  •     //остановка потока на 0,01секунды
  •     System.Threading.Thread.Sleep(10);
  •     //прекращаем уменьшать размеры формы
  •     if(width == 432) {
  •      break;
  •     }
  •    }
  •   }
  •  }
  • }