Исключение StackOverflow при запуске программы - C#
Формулировка задачи:
Для курсовой работы задали написать программу на C# с помощью WindowsForms. После того, как запускаю программу и нажимаю на кнопку под наименованием "Прийняти" программа виснет, и вылазит следующее.
Вот код из class1
А вот код Form1
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();
}
}
}
}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; }
}