воскресенье, 14 июля 2013 г.

Работа с событием Form_Paint и Form_Load

Рассмотрим приложение на вычисление правильного n-угольника.
Периметр p правильного n-угольника, описанного около окружности радиуса r, равен 2*n*r*tg(PI/n). Ввести значения n и r, проверить их корректность и вывести значение периметра. Проверяемые условия: n >= 3 и r > 0; отсутствие  во входной строке не цифровых данных.
Размещение управляющий элементов на форме выполнить в относительных координатах. Ввести ограничения на минимизацию формы. (Изображения элементов не должны «налезать» друг на друга при уменьшении размеров формы.)




Разместите на форме элементы управления Lable1, Lable2, TextBox1, TextBox2, TextBox3, Button1 Button2.
Задайте свойства: Form1:           Text = Периметр правильного n-угольника
                                                      Font.Bold = True
  StartPosition = CenterScreen
                          label1                       Text = Число сторон многоугольника
                                                           Font.Bold = True
                          label2                       Text = Радиус вписанной окружности
                                                           Font.Bold = True
                          button1:        Text = Проверить данные:
                       Font.Bold = True
                          button1:        Text = Вычислить периметр:
                       Font.Bold = True
textbox1, textbox2, textbox3:           Multiline = false
                          Font.Bold = True

Решение Solution_3_2

namespace WinProgram_2_1 {
    public partial class Form1 : Form {
        public Form1() {
            InitializeComponent( );
            textBox3.ReadOnly = true; // не разрешаем внешних изменений
            button2.Enabled = false;  // блокируем кнопку
        }
//.. поля объекта класса Form1:
        int n;
        double r, p;
        int dx, dy;
private void Form1_Load(object sender, EventArgs e) {
            this.MinimumSize = new Size (label2.Size.Width +
                8*textBox2.Size.Width/3 + label2.Location.X,
                label1.Size.Height + label2.Size.Height +
                5*button1.Size.Height/2 + 5*button2.Size.Height/2);
        }

        private void Form1_Paint(object sender, PaintEventArgs e) {
            dx = this.ClientSize.Width;
            dy = this.ClientSize.Height;
            label1.Location = new Point(dx /10, dy/10);
            label2.Location = new Point(dx /10, dy/4);
          
            textBox1.Location = new Point(2*dx /3, dy/10);//устанавливаем местоположение для окна ввода информации 1
            textBox2.Location = new Point(2*dx /3, dy/4); //устанавливаем местоположение для окна ввода информации 2
            button1.Location = new Point(dx/10,dy/2);//задаем местоположение для кнопки 1
            button2.Location = new Point(dx/10,2*dy/3); //задаем местоположение для кнопки 2
            textBox3.Location = new Point(2*dx /3, 2*dy/3);/*x и y отсчитываются относительно левого верхнего угла формы.
х - отсчитывается вправо от него начиная от значения 0
у - отсчитывается вниз от него начиная от значения 0 */
        }
        private void Form1_Resize(object sender, EventArgs e) {
            Refresh();
        }

//.. обработчик кнопки:
        private void button1_Click(object sender, EventArgs e) {
            while (!int.TryParse(textBox1.Text, out n)|n < 3)
                {
                    MessageBox.Show("Ошибка в данных!");
                textBox1.Focus();//устанавливаем курсор на textbox1
                return;
                }
            while (!double.TryParse(textBox2.Text, out r)|r<=0)
            {
                MessageBox.Show("Ошибка в данных!");
                textBox2.Focus();
                return;
            }
            button2.Enabled = true;
            textBox3.Text = "";
        }
//.. обработчик кнопки:
        private void button2_Click(object sender, EventArgs e) {
            p = 2 * n * r * Math.Tan(Math.PI / n);
            textBox3.Text =  String.Format("{0:g5}",  p);
        }

        private void textBox1_TextChanged(object sender, EventArgs e)
//при изменении текста в окне ввода button2 отключаем
{
            button2.Enabled = false; 
        }

        private void textBox2_TextChanged(object sender, EventArgs e)
//при изменении текста в окне ввода button2 отключаем
{
            button2.Enabled = false; 
        } 
    }
}