Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.76/25: Рейтинг темы: голосов - 25, средняя оценка - 4.76
4 / 4 / 1
Регистрация: 15.08.2013
Сообщений: 108

При создании объекта возникает ошибка System.StackOverflowException

20.02.2014, 17:15. Показов 5022. Ответов 33
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Я создал интерфейс,
C#
1
2
3
4
5
  
     interface myProgramm
    {
    void systemCommand(string type);
    }
а от него унаследовал класс, который объявил в форме:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
  
     public class CompNet :Form1, myProgramm
        {
             public void systemCommand(string type)
             {
                  switch (type)
                  {
                      case "close":
                          
                          panel2.Visible = true;
                          break;
                      case "minimize":
                          WindowState = FormWindowState.Minimized;
                          break;
                      case "maximize":
                          if (q == true)
                          { WindowState = FormWindowState.Maximized; q = false; }
                          else { WindowState = FormWindowState.Normal; q = true; }
                          break;
                  }
             }
        }
И при создании объекта
C#
1
CompNet user = new CompNet();
выдается ошибка: "Необработанное исключение типа "System.StackOverflowException" произошло в Компьютерные сети.exe"

Может что-то не так объявляю, или метод по-другому нужно перегрузить?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
20.02.2014, 17:15
Ответы с готовыми решениями:

Возникает ошибка "необработанное исключение типа System.StackOverflowException"
Привет. Возникает ошибка "необработанное исключение типа System.StackOverflowException" На этой строке: Form1 Control = new Form1(); ...

По какой причине возникает System.StackOverflowException и как можно это исправить?
Здравствуйте, у меня присутствуют два класса: StyleWindows (Персонализация окон приложения) и WorkingWithXML(Обработка данных...

Microsoft.ReportViewer и ошибка system.stackoverflowexception
Для визуализации документа использую данную утилиту и вот почему то в таком коде private void reportViewer1_RenderingComplete(object...

33
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
20.02.2014, 20:26
Студворк — интернет-сервис помощи студентам
Но ведь если не наследовать, я не смогу воздействовать на объект?
event Вам поможет.
0
4 / 4 / 1
Регистрация: 15.08.2013
Сообщений: 108
20.02.2014, 20:28  [ТС]
Цитата Сообщение от IamRain Посмотреть сообщение
На какой конкретно?
На объект формы panel2, т.е.
C#
1
panel2.Visible=true;
Добавлено через 1 минуту
Цитата Сообщение от insite2012 Посмотреть сообщение
event Вам поможет
А можно привести пример кода с event? Я в этом слабо ориентируюсь
0
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
20.02.2014, 20:37
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Threading;
 
namespace WindowsFormsApplication8
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();        
            button1.Click+=new EventHandler(button1_Click);
        }
       
        void button1_Click(object sender, EventArgs e)
        {
            MyClass mc = new MyClass();
            mc.MyEvent += new Action(Event);
            mc.DoEvent();
        }
        void Event()
        {
            MessageBox.Show("А вот Вам и событие!!!");
        }
        
    }
 
    class MyClass
    {
        public event Action MyEvent;
 
        public void DoEvent()
        {
            if (MyEvent != null)
                MyEvent();
        }
    }
}
Вот пример. В классе возникает событие, на форме к нему подключен обработчик, который и срабатывает при наступлении события.
1
4 / 4 / 1
Регистрация: 15.08.2013
Сообщений: 108
20.02.2014, 23:18  [ТС]
Цитата Сообщение от insite2012 Посмотреть сообщение
Вот пример. В классе возникает событие, на форме к нему подключен обработчик, который и срабатывает при наступлении события.
Спасибо, буду внедрять это в свою программу

Добавлено через 2 часа 37 минут
Вот, что я заметил по данному коду: если добавить вторую кнопку и сделать для нее событие event2, программа будет вести себя некорректно, несколько раз обрабатываются события, решил проблему частично:
C#
1
2
3
4
5
6
7
public void DoEvent()
        {
            if (MyEvent != null)
                MyEvent();
                MyEvent=null;
 
        }
Но первое событие выполняется дважды, и еще код для разворачивания формы на весь экран:
C#
1
2
3
 if (q == true)
                        { WindowState = FormWindowState.Maximized; q = false; }
                        else { WindowState = FormWindowState.Normal; q = true; }
Она разворачивается, но затем сразу же принимает обычное состояние, можно ли это исправить?
0
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
20.02.2014, 23:20
Так вы каждому событию назначайте свой обработчик, и все будет корректно работать. Я так прогрессбаром на форме из класса управляю. Включаю, отключаю, меняю параметры...
0
4 / 4 / 1
Регистрация: 15.08.2013
Сообщений: 108
23.02.2014, 18:23  [ТС]
У меня при этом коде событие обрабатывается 2 раза. Нужно ли в конструкторе добавлять обработчик button1.Click?
Цитата Сообщение от insite2012 Посмотреть сообщение
using System;
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
        public Form1()
        {
         InitializeComponent(); 
         button1.Click+=new EventHandler(button1_Click);
          }
 
 
 
            void button1_Click(object sender, EventArgs e)
            {
             MyClass mc = new MyClass();
             mc.MyEvent += new Action(Event);
             mc.DoEvent();
             }
И даже при разных обработчиках для отдельных событий у меня они выполняются по 2 раза. Как это исправить?
0
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
23.02.2014, 18:35
Это кому как удобнее. Я стараюсь все прописывать в основном коде, только если совсем некогда, то создаю обработчик автоматом. Вы можете делать как удобнее...
0
4 / 4 / 1
Регистрация: 15.08.2013
Сообщений: 108
23.02.2014, 18:37  [ТС]
Получается, я могу отказаться от кода:
C#
1
2
3
4
5
6
 void button1_Click(object sender, EventArgs e)
            {
             MyClass mc = new MyClass();
             mc.MyEvent += new Action(Event);
             mc.DoEvent();
             }
и прописать в конструкторе?
0
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
23.02.2014, 19:13
В конструкторе Вы создадите только пустой обработчик. А вот наполнять его кодом придется самому...
0
4 / 4 / 1
Регистрация: 15.08.2013
Сообщений: 108
23.02.2014, 19:15  [ТС]
Цитата Сообщение от insite2012 Посмотреть сообщение
В конструкторе Вы создадите только пустой обработчик. А вот наполнять его кодом придется самому...
Так вот проблема в том, что в программе реагируется на этот обработчик в конструкторе и на его наполнение и событие выполняется 2 раза
0
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
23.02.2014, 19:29
Что-то у Вас не то... Поставьте четко задачу, что должно происходить
0
4 / 4 / 1
Регистрация: 15.08.2013
Сообщений: 108
23.02.2014, 20:17  [ТС]
Мне нужно, чтобы по кнопке "Показать" panel1 становилась видимой, а по кнопке скрыть скрывалась (на первой форме). Проблема в том, что события выполняются несколько раз. Вот сам проект
Вложения
Тип файла: rar Test.rar (75.3 Кб, 3 просмотров)
0
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
23.02.2014, 20:56
Мне не совсем понятна логика этой программы, но вот так все срабатывает. Вот код первой формы.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Threading;
 
namespace Test
{
    public partial class Form1 : Form
    {
        MyClass mc = new MyClass();
        
        public Form1()
        {
            InitializeComponent();
            mc.MyEvent+=new Action(Event);
            mc.MyEvent2+=new Action(Event2);
        }
       public class CompNet : Form1
        {
            public bool q = true;
 
 
            public void systemCommand(string type)
            {
                switch (type)
                {
                    case "close":
 
                        panel1.Visible=true;
                        break;
                    case "minimize":
                        WindowState = FormWindowState.Minimized;
                        break;
                    case "maximize":
                        if (q == true)
                        { WindowState = FormWindowState.Maximized; q = false; }
                        else { WindowState = FormWindowState.Normal; q = true; }
                        break;
                }
            }
 
            public void changeForm(int number)
            {
                switch (number)
                {
                    case 1:
                        this.Hide();
                        Form1 form1 = new Form1();
                        form1.ShowDialog();
                        this.Close();
                        break;
                    case 2:
                        this.Hide();
                        Form2 form2 = new Form2();
                        form2.ShowDialog();
                        this.Close();
                        break;
                    case 3:
                        this.Hide();
                        Form3 form3 = new Form3();
                        form3.ShowDialog();
                        this.Close();
                        break;
                }
            }
        }
        //CompNet user = new CompNet();
 
        private void button6_Click(object sender, EventArgs e)
        {
           // user.systemCommand("close");
        }
 
        private void button5_Click(object sender, EventArgs e)
        {
            //user.systemCommand("maximize");
        }
 
        private void button4_Click(object sender, EventArgs e)
        {
            //user.systemCommand("minimize");
        }
 
        private void button2_Click(object sender, EventArgs e)
        {
           // user.changeForm(2);
        }
 
        private void button3_Click(object sender, EventArgs e)
        {
           // user.changeForm(3);
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            mc.DoEvent();         
        }
 
        private void button7_Click(object sender, EventArgs e)
        {
            mc.DoEvent2();
        }
 
        void Event()
        {
            panel1.Visible=true;
 
            MessageBox.Show("А вот Вам и событие1!!!");
            
        }
 
        void Event2()
        {
            panel1.Visible = false;
            MessageBox.Show("А вот Вам и событие2!!!");
        }     
    }
 
    class MyClass
    {
        public event Action MyEvent;
        public event Action MyEvent2;
      
 
 
        public void DoEvent()
        {
            if (MyEvent != null)
            {
                MyEvent();
              
               
            }
        }
 
      
 
        public void DoEvent2()
        {
            if (MyEvent2 != null)
            {
                MyEvent2();
                
            }
        }
       
    }
}
1
4 / 4 / 1
Регистрация: 15.08.2013
Сообщений: 108
24.02.2014, 19:35  [ТС]
Цитата Сообщение от insite2012 Посмотреть сообщение
Мне не совсем понятна логика этой программы
Спасибо, все получилось. Конкретно в этой программе нет никакой логики, но мне нужно было понять эти принципы класса и событий, чтобы в основной программе, которую я не мог сюда сбросить все это реализовать
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
24.02.2014, 19:35

Ошибка System.NullReferenceException при создании динамических контролов
На форме по нажатию на кнопки можно создать до трех контролов DateTimePicker. Их значение нужно передать в класс Class1. Если создается все...

Как исправить исключение System.StackOverflowException в System.Drawing.dll
An unhandled exception of type 'System.StackOverflowException' occurred in System.Drawing.dll что делать все работала нормально и...

Ошибка System.StackOverflowException при использовании StreamReader
У меня есть метод, которой получает два числа из файла: protected void GetNumbers() { using (StreamReader...

RSA алгоритм ошибка System.StackOverflowException
есть такой код, он для лаб. роб. немогу понять как решить проблему, в 12 стороке возникает System.StackOverflowException при вводе 1650....

Ошибка System.StackOverflowException до загрузки формы
Добрый день, при загрузке формы возникает ошибка вида System.StackOverflowException HResult=0x800703E9 Сообщение = Выдано исключение типа...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
34
Ответ Создать тему
Новые блоги и статьи
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
Как у меня протекала болезнь
zorxor 27.08.2026
Здравствуйте, друзья! Эта запись блога предназначена именно для вас - для моих дорогих друзей, которые знали меня лично. Чтобы ответить на вопрос - а что же со мной произошло на самом деле? Я учился. . .
Нашел вот забавное видео о измерениях. Лучшее что я видел на эту тему
kumehtar 26.08.2026
ILETXiw9bMQ Основная суть и тезисы по измерениям: 0D (Нулевое измерение): точка, не имеющая длины, ширины, высоты или объема. Объект не может перемещаться в 0D. 1D (Первое измерение):. . .
[EasyBuilder Pro] Памятка по разработке для панелей Weintek
ФедосеевПавел 26.08.2026
Памятка по разработке для панелей Weintek ВВЕДЕНИЕ Ранее, при реализации проектов основное внимание уделял разработке управляющей программы для контроллера, а панели оператора доставалось время. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru