Исключение StackOverflow при запуске программы - C#

Узнай цену своей работы

Формулировка задачи:

Для курсовой работы задали написать программу на C# с помощью WindowsForms. После того, как запускаю программу и нажимаю на кнопку под наименованием "Прийняти" программа виснет, и вылазит следующее. Вот код из class1
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace WindowsFormsApplication1
{
    class Mechanism
      {
        
        public double Rk
        {
            set { if (value > 0) Rk = value; }
            get { return Rk; }
        }
        public double Dk
        {
            set { if (value > 0) Dk = value; }
            get { return Dk; }
        }
 
        public double h
        {
            set { if (value > 0) h = value; }
            get { return h; }
        }
 
        public double Lk
        {
            set { if (value > 0) Lk = value; }
            get { return Lk; }
        }
        public void recalculate()
        {
            Dk = 2 * Rk + 10;
            Lk = Rk + h + 50;
        }
        public void SetInitialData()
        {
            Rk = 120;
            h = 5;
            recalculate();
        }
        public void checkData(double Rk, double h, out string code, out string Message, out double value)
        {
            Message = " "; // Повідомлення про результат перевірки
            value = 0; // нове значення некоректного параметра(якщо такий буде знайдено
            if ((Rk < 120) || (Rk > 160)) //умова перевірки
            {
                Message = " Значення повинне бути в межах від 120 до 160 мм!";
                code = "Rk"; // некоректний параметр
                value = 120; // коректне значення
 
            }
            else
            if ((h < 5) || (h > 8))
            {
                Message = " Значення повинне бути в межах від 5 до 8 мм!";
                code = "h";
                value = 5;
            }
            else
            {
                Message = "Вхідні дані - коректні!";
                code = "";
                recalculate();
 
            }
 
        }

    }
 
}
А вот код Form1
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 WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        Mechanism MyMech;
        public Form1()
        {
            InitializeComponent();
            MyMech = new Mechanism();
        }
 
        private void Form1_Load(object sender, EventArgs e)
        {
 
        }
 
        private void label2_Click(object sender, EventArgs e)
        {
 
        }
 
        private void label3_Click(object sender, EventArgs e)
        {
 
        }
 
        private void label8_Click(object sender, EventArgs e)
        {
 
        }
 
        private void textBoxRk_Leave(object sender, EventArgs e)
        {
            txtBox_Leave(textBoxRk, Convert.ToString(MyMech.Rk));
        }
 
        private void textBoxh_Leave(object sender, EventArgs e)
        {
            txtBox_Leave(textBoxh, Convert.ToString(MyMech.h));
        }
        private void txtBox_Leave(TextBox txtBox, string value)
        {
            try
            {
                Convert.ToDouble(txtBox.Text); // спроба конвертувати текст в число
            }
            catch // у випадку виникнення помилки
            {
                MessageBox.Show("Введіть число!"); // виведення повідомлення
                txtBox.Text = value; // встановлення заданого значення
                txtBox.Focus(); // повернення фокусу в поле введення
            }

        }
        private void buttonApply_Click(object sender, EventArgs e)
        {
            double Rk = Convert.ToDouble(textBoxRk.Text);
            double h = Convert.ToDouble(textBoxh.Text);
 
            string Message, code; double value;
            MyMech.checkData(Rk, h, out code, out Message, out value);
 
            MessageBox.Show(Message);// виведення повідомлення користувачу
            // встановлення курсору в помилкове поле і виведення допустимого значення
            switch (code)
            {
                case "Rk": textBoxRk.Focus(); textBoxRk.Text = Convert.ToString(value); break;
                case "h": textBoxh.Focus(); textBoxh.Text = Convert.ToString(value); break;
 
            }
            textBoxDk.Text = Convert.ToString(MyMech.Dk);
            textBoxLk.Text = Convert.ToString(MyMech.Lk);

        }
    }
}

Решение задачи: «Исключение StackOverflow при запуске программы»

textual
Листинг программы
class Mechanism
{
    private double rk;
    public double Rk
    {
        set { if (value > 0) rk = value; }
        get { return rk; }
    }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 3.9 из 5
Похожие ответы