Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.88/8: Рейтинг темы: голосов - 8, средняя оценка - 4.88
 Аватар для Anonymous4722
5 / 3 / 2
Регистрация: 29.11.2012
Сообщений: 545

События. меню не выводит то что нужно

09.10.2019, 03:09. Показов 1638. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте.
Меню не выводит, то что нужно. Выводит какие-то надписи. Не могу понять в чем причина.
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
using System;
using static System.Console;
using System.Collections;
/*
 * Реализовать класс "меню". В классе должен быть массив пунктов меню. Пункт меню
 * содержит наименование пункта и делегат, позволяющий назначить этому пункту действие.
 * При создании объекта "меню" заполняется массив его пунктов в конструкторе или
 * отдельным методом AddMenuItem. При создании каждого пункта меню ему назначается
 * конкретное действие (обязательно использовать статический метод, нестатический
 * метод, лямбда-функцию). В меню должен быть метод "старт", который выводит меню
 * на экран и запрашивает у пользователя выбор пункта, а затем выполняет связанное
 * с этим пунктом действие.
 */
 
namespace menu
{
    delegate void Del1();
    //
    class Menu
    {
        public event Del1 OnCl
        {
            add { OnCl += value; }
            remove { OnCl += null; }
        }
        //
        Del1 Oncl;
        public void Click()
        {
            Oncl?.Invoke();
        }
    }
    //
    class B
    {
        public static void St()
        {
            WriteLine("STATIC");
        }
        //
        public void Pub()
        {
            WriteLine("PUBLIC");
        }
        //
        public void Lyambda()
        {
            Menu menu = new Menu();
            menu.OnCl += () => { WriteLine("THIS IS LYAMBDA"); };
        }
    }
    class MainClass
    {
        public static void Main(string[] args)
        {
            B b = new B();
            Menu menu = new Menu();
            
            string selection;
            do
            {
                Console.Clear();
                WriteLine("Select one of the menu items:\r\n" +
                    "1. Static;\r\n" +
                    "2. Public;\r\n" +
                    "3. Lyambda;\r\n" +
                    "0. Exit Program.");
                selection = ReadLine();
                switch (selection)
                {
                    case "1": menu.OnCl += B.St;
                        menu.Click();
                        break;
                    case "2":
                        menu.OnCl += b.Pub;
                        menu.Click();
                        break;
                    case "3":
                        b.Lyambda();
                        break;
                }
            } while (selection != "0");
        }
    }
}
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
09.10.2019, 03:09
Ответы с готовыми решениями:

написала что могла, но код не правильный.нужно что бы в квадрат выводился ответ, а выводит какую то ерунду
пожалуйста можете помочь с задачей? stdin=0 stdout=1 stderr=2 data segment text1 db 'vnimanie' textlen=$-text1 buflen=$-buf ...

Что не так?Выводит не то, что нужно
Имеются данные о сотрудниках предприятия: фамилия, стаж, зарплата. Составить программу, которая определит максимальную зарплату для...

Выводит не то, что нужно
Задача: Нарисуйте в отчете три простых фигуры: два квадрата со сторонами 1 и с центром в точках (1.5,0) и (-1.5,0) и дугу с центром в...

13
 Аватар для Anonymous4722
5 / 3 / 2
Регистрация: 29.11.2012
Сообщений: 545
09.10.2019, 03:13  [ТС]
Вот сами надписи
Миниатюры
События. меню не выводит то что нужно  
0
1123 / 794 / 219
Регистрация: 15.08.2010
Сообщений: 2,185
09.10.2019, 03:32
Anonymous4722, вот это надписи
Миниатюры
События. меню не выводит то что нужно  
0
1123 / 794 / 219
Регистрация: 15.08.2010
Сообщений: 2,185
09.10.2019, 03:33
А то что у вас это английский текст. Говорит что в 23 строке С должна быть строчной
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
09.10.2019, 10:03
Цитата Сообщение от Anonymous4722 Посмотреть сообщение
C#
1
2
3
4
5
        public event Del1 OnCl
        {
            add { OnCl += value; }
            remove { OnCl += null; }
        }
Рекурсивный вызов, приводящий к переполнению стека.

C# — регистрозависимый язык, смотрите внимательно на имя поля, через которое реализуется событие:
C#
1
Del1 Oncl;
Второй баг в этом же участке кода сможете сами заметить?
0
 Аватар для Anonymous4722
5 / 3 / 2
Регистрация: 29.11.2012
Сообщений: 545
09.10.2019, 10:27  [ТС]
Цитата Сообщение от kolorotur Посмотреть сообщение
Второй баг в этом же участке кода сможете сами заметить?
Если я + или - уберу и оставлю просто =, то выводит ошибку.
Миниатюры
События. меню не выводит то что нужно  
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
09.10.2019, 10:30
Цитата Сообщение от Anonymous4722 Посмотреть сообщение
Если я + или - уберу и оставлю просто =, то выводит ошибку.
Верно, будет выдавать ошибку.
А где у вас в изначальном коде минус?
0
 Аватар для Anonymous4722
5 / 3 / 2
Регистрация: 29.11.2012
Сообщений: 545
09.10.2019, 10:37  [ТС]
kolorotur, я сделал вот, и вроде работает.
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
using System;
using static System.Console;
using System.Collections;
/*
 * Реализовать класс "меню". В классе должен быть массив пунктов меню. Пункт меню
 * содержит наименование пункта и делегат, позволяющий назначить этому пункту действие.
 * При создании объекта "меню" заполняется массив его пунктов в конструкторе или
 * отдельным методом AddMenuItem. При создании каждого пункта меню ему назначается
 * конкретное действие (обязательно использовать статический метод, нестатический
 * метод, лямбда-функцию). В меню должен быть метод "старт", который выводит меню
 * на экран и запрашивает у пользователя выбор пункта, а затем выполняет связанное
 * с этим пунктом действие.
 */
 
namespace menu
{
    delegate void Action();
    //
    class Menu
    {
        public event Action OnClick
        {
            add { OncClick = value; }
            remove { OncClick = null; }
        }
        //
        Action OncClick;
        public void Click()
        {
            OncClick?.Invoke();
        }
    }
    //
    class B
    {
        public static void St()
        {
            WriteLine("STATIC");
        }
        //
        public void Pub()
        {
            WriteLine("PUBLIC");
        }
        //
        //public void Lyambda()
        //{
        //    Menu menu = new Menu();
        //    menu.OnClick += () => { WriteLine("THIS IS LYAMBDA"); };
        //}
    }
    class MainClass
    {
        public static void Main(string[] args)
        {
            B b = new B();
            Menu menu = new Menu();
 
            string selection;
            do
            {
                Console.Clear();
                WriteLine("Select one of the menu items:\r\n" +
                    "1. Static;\r\n" +
                    "2. Public;\r\n" +
                    "3. Lyambda;\r\n" +
                    "0. Exit Program.");
                selection = ReadLine();
                switch (selection)
                {
                    case "1":
                        menu.OnClick += B.St;
                        menu.Click();
                        break;
                    case "2":
                        menu.OnClick += b.Pub;
                        menu.Click();
                        break;
                    case "3":
                        menu.OnClick += () => { WriteLine("LYAMBDA"); };
                        break;
                }
            } while (selection != "0");
        }
    }
}
Добавлено через 35 секунд
kolorotur, Но у меня почему-то не работает Лямбда.
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
09.10.2019, 10:38
Цитата Сообщение от Anonymous4722 Посмотреть сообщение
вроде работает.
У вас один подписчик на событие затирает всех остальных подписчиком.
Это специально так задумано? Обычно подписчик не должен влиять на других подписчиков.

Добавлено через 1 минуту
Цитата Сообщение от Anonymous4722 Посмотреть сообщение
Но у меня почему-то не работает Лямбда.
Событие же вызывается при выполнении метода Click.
Где этот метод вызывается при использовании лямбды?
0
 Аватар для Anonymous4722
5 / 3 / 2
Регистрация: 29.11.2012
Сообщений: 545
09.10.2019, 10:40  [ТС]
Цитата Сообщение от kolorotur Посмотреть сообщение
У вас один подписчик на событие затирает всех остальных подписчиком.
Это специально так задумано? Обычно подписчик не должен влиять на других подписчиков.
Нет, не должно, должно все работать и выводить на экран результат, т е я нажал 3 и у меня вывелась лямбда функция и ее текст, который я прописал. А это не происходит.
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
09.10.2019, 10:44
Лучший ответ Сообщение было отмечено Anonymous4722 как решение

Решение

Цитата Сообщение от Anonymous4722 Посмотреть сообщение
я нажал 3 и у меня вывелась лямбда функция и ее текст
В коде с подпиской через лямбду вы не вызываете Click.
1
 Аватар для Anonymous4722
5 / 3 / 2
Регистрация: 29.11.2012
Сообщений: 545
09.10.2019, 10:45  [ТС]
Цитата Сообщение от kolorotur Посмотреть сообщение
Событие же вызывается при выполнении метода Click.
Где этот метод вызывается при использовании лямбды?
Сделал, все работает. Забыл метод Click добавить.

Добавлено через 1 минуту
kolorotur, И еще вопрос, как сделать еще одно меню с пунктом Start и чтобы при нажатии клавиши 1 вызывалась второе меню, которое я уже прописал?
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
09.10.2019, 10:45
Цитата Сообщение от Anonymous4722 Посмотреть сообщение
все работает
Я бы пересмотрел код реализации события в классе Menu.
В данный момент количество подписчиков ограничено одним.
0
 Аватар для Anonymous4722
5 / 3 / 2
Регистрация: 29.11.2012
Сообщений: 545
09.10.2019, 11:03  [ТС]
kolorotur, И еще вопрос, как сделать еще одно меню с пунктом Start и чтобы при нажатии клавиши 1 вызывалась второе меню, которое я уже прописал?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
09.10.2019, 11:03
Помогаю со студенческими работами здесь

Не выводит в файл то, что нужно
Добрый день. Подскажите, пожалуйста, в чем ошибка? Не выводит в файл то, что нужно. #include "stdafx.h" #include...

Программа выводит не то что нужно
Пытаюсь реализовать дешифрацию шифра Полибия. char alphavit = { {'А','Б', 'В', 'Г', 'Д','Е'}, ...

Шифр Цезаря: программа выводит не то, что нужно
Пытался реализовать код цезаря на С++ #include <iostream> using namespace std; const char alphavit={'A', 'B', 'C', 'D', 'E',...

Метод выводит не то, что нужно операции с плавающей точкой
Я уже весь мозг себе сломал. Не понимаю, почему не работает. Пробовал отдельно выводить height, все правильно, ratio, тоже правильно,...

Форматированный вывод не выводит то что нужно на других компьютерах
Доброго времени суток! Есть такая задача: Решить функцию: написал к ней такой вод код: using System; using...


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
Функция установки текстового статуса в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
10 пpимет, которые всегда сбываются
Maks 31.03.2026
1. Чтобы, наконец, пришла маршрутка, надо закурить. Если сигарета последняя, маршрутка придет еще до второй затяжки даже вопреки расписанию. 2. Нaдоели зима и снег? Не надо переезжать. Достаточно. . .
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 31.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO Апнулись до NET10. Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта так и в интерактивном режиме. из сложностей - чисто функциональный подход. Решил. . .
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2. Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники". В. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru