Форум программистов, компьютерный форум, киберфорум
Наши страницы
C# Windows Forms
Войти
Регистрация
Восстановить пароль
 
ghummbor
0 / 0 / 0
Регистрация: 03.08.2015
Сообщений: 36
1

Изменение содержимого формы через событие

10.09.2015, 15:08. Просмотров 448. Ответов 6
Метки нет (Все метки)

Доброго времени суток. Есть проект, в котором в textbox на форме должен выводится текст с неким прогрессом.
Кликните здесь для просмотра всего текста

Код формы:
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
namespace Test_project
{
 
    public partial class FormGUI : Form
    {
 
        public FormGUI()
        {
            InitializeComponent();
 
        }
 
        private void FormGUI_Load(object sender, EventArgs e)
        {
            txtConsole.Text = "Выберите порт и нажмите 'пуск'" + Environment.NewLine;
            progressBar1.Value += 1;
        }
 
        private void Launch_Click(object sender, EventArgs e)
        {
            Listener Listener_object = new Listener(); // создаем объект класса через конструктор
            write_Handler writeH = new write_Handler();
            Listener_object.Echo_Event += writeH.Message; //создаем событие
            progressBar1.Maximum = 5;
            Listener.port = Convert.ToInt32(comboBox1.Text);
 
            Listener_object.StartClient();
 
        }
 
    }
 
    public class write_Handler //класс, реагирующий на событие
    {
        public void Message()
        {
            FormGUI FormG = new FormGUI();
            FormG.txtConsole.Text = "Response recieved: ";
            FormG.txtConsole.Text = Listener.response + Environment.NewLine;
            FormG.progressBar1.Value += 1;
        }
    }
 
}
Код класса где событие вызывается:
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
 public class Listener
    {
        public delegate void MethodContainer(); // делегат для переноса
 
        public static String response = String.Empty; //строка для приема данных (изначально пустая)
        /// <summary>
        /// создаем событие для передачи переменной в форму 
        /// </summary>
        public event MethodContainer Echo_Event = null; //ивент на делегате MethodContainer из формы
 
        public  void Echo_response()
        {
           // if (Echo_Event != null)
                Echo_Event();
        }
 
        /// <summary>
        /// /-------------------------------------------------/
        /// </summary>
        public static int port;// порт КУДА(!!!) слать
 
        /*       Флаги успешного соединения        */
        public static ManualResetEvent connectDone =
            new ManualResetEvent(false);
        public static ManualResetEvent sendDone =
            new ManualResetEvent(false);
        public static ManualResetEvent receiveDone =
            new ManualResetEvent(false);
 
        public void StartClient()
        {
            try
            {
                FormGUI FormG = new FormGUI();
                
                IPAddress ipAddress = IPAddress.Parse("192.168.1.200");
                IPEndPoint remoteEP = new IPEndPoint(ipAddress, port);
                Listener.response = "формируется сокет" + ipAddress + ":" + Convert.ToString(port);
                //вызываем ивент
                Echo_response(); //<---- момент вызова
 /* дальше внизу много неважного текста */
             }
         }
    }



Событие отрабатывается, но изменения формы не происходит. В чем причина и как с этим бороться?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.09.2015, 15:08
Ответы с готовыми решениями:

Изменение содержимого формы
Здравствуйте. Вопрос: Как сделать в визуальной среде изменение содержимого...

Изменение содержимого пропорционально изменению самой формы
на днях возник такой вопрос: делаю настройки, а пользователь должен задать...

Плавное изменение размеров формы через таймер
Всем привет, нужно сделать плавное изменение размера формы, но первое что...

Изменение цвета формы через диалоговое окно
Всем привет. Помогите пожалуйста с кодом программы. По заданию у нас идет две...

Изменение элемента главной формы через другой класс
public class Logger { Form1 f = new Form1(); // Работа с...

6
Woldemar89
TheGreatCornholio
1210 / 691 / 280
Регистрация: 30.07.2015
Сообщений: 2,363
Завершенные тесты: 1
11.09.2015, 21:20 2
Цитата Сообщение от ghummbor Посмотреть сообщение
C#
1
FormGUI FormG = new FormGUI();
Обращаешься вместо своей формы к новому экземпляру потому что.
0
ghummbor
0 / 0 / 0
Регистрация: 03.08.2015
Сообщений: 36
14.09.2015, 10:35  [ТС] 3
Если обращаться не к экземпляру, то ругается на нестатический член класса. А делать все статическим, похоже, нецелесообразно.
0
Woldemar89
TheGreatCornholio
1210 / 691 / 280
Регистрация: 30.07.2015
Сообщений: 2,363
Завершенные тесты: 1
14.09.2015, 10:38 4
Цитата Сообщение от ghummbor Посмотреть сообщение
Если обращаться не к экземпляру, то ругается на нестатический член класса. А делать все статическим, похоже, нецелесообразно.
Передай основную форму классу как аргумент.
1
ghummbor
0 / 0 / 0
Регистрация: 03.08.2015
Сообщений: 36
14.09.2015, 18:13  [ТС] 5
Решил проблему частично. Теперь при обработке события возникает

Вызвано исключение: "System.NullReferenceException"
C#
1
2
3
4
5
6
7
8
9
10
11
12
public event UI Echo_Event = null; //ивент на делегате MethodContainer из формы
        
        public  void Echo_response()
        {
 
        /*   if (Echo_Event != null)
               Echo_Event();*/
           // FormGUI formG = new FormGUI();
            FormGUI.RESPONSE = Listener.response;
            Echo_Event();
           // formG.write_Handler();
        }
И в форме:
C#
1
2
3
4
5
6
public FormGUI()
        {
            InitializeComponent();
            Listener Listener_object = new Listener();
            Listener_object.Echo_Event += new UI(write_Handler);
        }
0
wm_leviathan
196 / 198 / 69
Регистрация: 12.01.2011
Сообщений: 699
Завершенные тесты: 2
14.09.2015, 20:42 6
Цитата Сообщение от ghummbor Посмотреть сообщение
Если обращаться не к экземпляру, то ругается на нестатический член класса
к элементам формы можно так обращаться:
C#
1
2
3
4
5
public T GetForm<T>() where T : Form
        {
            return (T)Application.OpenForms[typeof(T).Name];
        }
var FormG = GetForm<FormGUI>();
3
ghummbor
0 / 0 / 0
Регистрация: 03.08.2015
Сообщений: 36
15.09.2015, 11:19  [ТС] 7
Все, полностью решил проблему, всем спасибо!
0
15.09.2015, 11:19
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.09.2015, 11:19

Из дочерней формы убрать событие из объекта главной формы (а потом обратно добавить)
Есть основная форма, которое я называю главной формой. Создаю дочернюю форму -...

Изменение содержимого listBox
Доброго всем времени суток! private void Bubble_Sort() { ...

Есть ли такое событие DataGridView, которое возникает при изменении ВИДИМОГО содержимого ячейки?
Из названия ясно, что CellValueChanged не канает; событие должно происходить...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru