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

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

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

Для курсовой работы задали написать программу на C# с помощью WindowsForms. После того, как запускаю программу и нажимаю на кнопку под наименованием "Прийняти" программа виснет, и вылазит следующее. Вот код из class1
Листинг программы
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. namespace WindowsFormsApplication1
  7. {
  8. class Mechanism
  9. {
  10. public double Rk
  11. {
  12. set { if (value > 0) Rk = value; }
  13. get { return Rk; }
  14. }
  15. public double Dk
  16. {
  17. set { if (value > 0) Dk = value; }
  18. get { return Dk; }
  19. }
  20. public double h
  21. {
  22. set { if (value > 0) h = value; }
  23. get { return h; }
  24. }
  25. public double Lk
  26. {
  27. set { if (value > 0) Lk = value; }
  28. get { return Lk; }
  29. }
  30. public void recalculate()
  31. {
  32. Dk = 2 * Rk + 10;
  33. Lk = Rk + h + 50;
  34. }
  35. public void SetInitialData()
  36. {
  37. Rk = 120;
  38. h = 5;
  39. recalculate();
  40. }
  41. public void checkData(double Rk, double h, out string code, out string Message, out double value)
  42. {
  43. Message = " "; // Повідомлення про результат перевірки
  44. value = 0; // нове значення некоректного параметра(якщо такий буде знайдено
  45. if ((Rk < 120) || (Rk > 160)) //умова перевірки
  46. {
  47. Message = " Значення повинне бути в межах від 120 до 160 мм!";
  48. code = "Rk"; // некоректний параметр
  49. value = 120; // коректне значення
  50. }
  51. else
  52. if ((h < 5) || (h > 8))
  53. {
  54. Message = " Значення повинне бути в межах від 5 до 8 мм!";
  55. code = "h";
  56. value = 5;
  57. }
  58. else
  59. {
  60. Message = "Вхідні дані - коректні!";
  61. code = "";
  62. recalculate();
  63. }
  64. }
  65.  
  66. }
  67. }
А вот код Form1
Листинг программы
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Threading.Tasks;
  9. using System.Windows.Forms;
  10. namespace WindowsFormsApplication1
  11. {
  12. public partial class Form1 : Form
  13. {
  14. Mechanism MyMech;
  15. public Form1()
  16. {
  17. InitializeComponent();
  18. MyMech = new Mechanism();
  19. }
  20. private void Form1_Load(object sender, EventArgs e)
  21. {
  22. }
  23. private void label2_Click(object sender, EventArgs e)
  24. {
  25. }
  26. private void label3_Click(object sender, EventArgs e)
  27. {
  28. }
  29. private void label8_Click(object sender, EventArgs e)
  30. {
  31. }
  32. private void textBoxRk_Leave(object sender, EventArgs e)
  33. {
  34. txtBox_Leave(textBoxRk, Convert.ToString(MyMech.Rk));
  35. }
  36. private void textBoxh_Leave(object sender, EventArgs e)
  37. {
  38. txtBox_Leave(textBoxh, Convert.ToString(MyMech.h));
  39. }
  40. private void txtBox_Leave(TextBox txtBox, string value)
  41. {
  42. try
  43. {
  44. Convert.ToDouble(txtBox.Text); // спроба конвертувати текст в число
  45. }
  46. catch // у випадку виникнення помилки
  47. {
  48. MessageBox.Show("Введіть число!"); // виведення повідомлення
  49. txtBox.Text = value; // встановлення заданого значення
  50. txtBox.Focus(); // повернення фокусу в поле введення
  51. }
  52.  
  53. }
  54. private void buttonApply_Click(object sender, EventArgs e)
  55. {
  56. double Rk = Convert.ToDouble(textBoxRk.Text);
  57. double h = Convert.ToDouble(textBoxh.Text);
  58. string Message, code; double value;
  59. MyMech.checkData(Rk, h, out code, out Message, out value);
  60. MessageBox.Show(Message);// виведення повідомлення користувачу
  61. // встановлення курсору в помилкове поле і виведення допустимого значення
  62. switch (code)
  63. {
  64. case "Rk": textBoxRk.Focus(); textBoxRk.Text = Convert.ToString(value); break;
  65. case "h": textBoxh.Focus(); textBoxh.Text = Convert.ToString(value); break;
  66. }
  67. textBoxDk.Text = Convert.ToString(MyMech.Dk);
  68. textBoxLk.Text = Convert.ToString(MyMech.Lk);
  69.  
  70. }
  71. }
  72. }

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

textual
Листинг программы
  1. class Mechanism
  2. {
  3.     private double rk;
  4.     public double Rk
  5.     {
  6.         set { if (value > 0) rk = value; }
  7.         get { return rk; }
  8.     }

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


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

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

10   голосов , оценка 3.9 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы