Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.61/18: Рейтинг темы: голосов - 18, средняя оценка - 4.61
5 / 5 / 0
Регистрация: 20.08.2017
Сообщений: 685

Спрятать кнопку на форме при нажатии кнопки на клавиатуре

22.05.2018, 16:12. Показов 4093. Ответов 28
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет, есть задание создать калькулятор, и при нажатии кнопки "Ентер" должна исчезнуть одна из кнопок калькулятора исчезает кнопка любая(т.е. рандомно или еще как-то)
Подскажите как это оформить в коде
Вот я создал примитивный калькулятор :
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
public Form1()
        {
            InitializeComponent();
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            label1.Text = Convert.ToString(umn(Convert.ToDouble(textBox1.Text), Convert.ToDouble(textBox2.Text)));
 
        }
 
        private void button2_Click(object sender, EventArgs e)
        {
 
        }
 
        private void button3_Click(object sender, EventArgs e)
        {
 
        }
 
        private void button4_Click(object sender, EventArgs e)
        {
 
        }
        public static double sum(double a, double b)
        {
            return a + b;
        }
        public static double min(double a, double b)
        {
            return a - b;
        }
        public static double umn(double a, double b)
        {
            return a * b;
        }
        public static double del(double a, double b)
        {
            return a / b;
        }
Куда тут нужно написать условие с нажатием "Ентер"
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
22.05.2018, 16:12
Ответы с готовыми решениями:

Нужно создать кнопку при нажатии кнопки на форме
public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); }...

По нажатию кнопки на клавиатуре нажимать кнопку на форме
Доброго времени суток! Не давно начал изучать с++. Возник такой вопрос: как по нажатию кнопки на клавиатуре (допустим на букву а или...

Как создать две новые кнопки на форме при нажатии на текущую кнопку
Господа программисты помогите новичку который пытается освоить программирование Windows forms! Такое дело: пишу значить простой...

28
5 / 5 / 0
Регистрация: 20.08.2017
Сообщений: 685
23.05.2018, 15:19  [ТС]
Студворк — интернет-сервис помощи студентам
meridbt, комментарий к вашему коду можно?

Добавлено через 25 секунд
kingzfate, полезный совет, спасибо
0
182 / 145 / 94
Регистрация: 30.07.2013
Сообщений: 579
23.05.2018, 15:27
Цитата Сообщение от Esso11 Посмотреть сообщение
tableLayoutPanel1 - это что за объект на форме?
это сетка, по которой выравнены кнопки, является родительским контейнером для кнопок
0
5 / 5 / 0
Регистрация: 20.08.2017
Сообщений: 685
23.05.2018, 15:32  [ТС]
meridbt, если есть время весь код прокомментировать могли бы?
0
182 / 145 / 94
Регистрация: 30.07.2013
Сообщений: 579
23.05.2018, 15:46
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
public partial class Form1 : Form
    {
        bool IsRunning; // поле, с помощью которого осуществляется выход из "вечного" цикла        
 
        public Form1()
        {
            InitializeComponent();
        }
        
        // обработка фиктивного нажатия на невидимую кнопку, которая является AcceptButton для формы. так перехватывается нажатие на Enter
        private void btnDummyEnter_Click(object sender, System.EventArgs e)
        {
            if (IsRunning) return; // если фоновый поток уже выполняется, ничего не делаем
            IsRunning = true; 
            Thread background = new Thread(Background);
            background.Start(); // запуск фонового потока
        }
 
        // обработка фиктивного нажатия на невидимую кнопку, которая является CancelButton для формы. Так перехватывается нажатие Esc
        private void btnDummyEsc_Click(object sender, System.EventArgs e)
        {
            IsRunning = false; // изменение поля чтобы завершить фоновый поток
        }
 
        private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
            IsRunning = false; // изменение поля чтобы завершить фоновый поток и процесс не оставался активным после закрытия формы
        }
 
        // метод, запускаемый в фоне
        private void Background()
        {
            Random rnd = new Random();
            int random; // поле для вычисления рандомного индекса кнопки
            int index; // поле для перебора всех контролов в контейнере
            while (IsRunning)
            {
                index = 0;
                random = rnd.Next(0, tableLayoutPanel1.Controls.Count); // вычисляем случайное значение от 0 до значения, соответствующего количеству кнопок в контейнере
                foreach(Control control in tableLayoutPanel1.Controls) // для каждого контрола...
                {
                    if (index++ == random) ControlVisible(control, false); // если индекс соответствует вычисленному рандомному значению, изменяем свойство Visible контрола на false
                    else ControlVisible(control, true); // и наоборот
                }
                Thread.Sleep(1000); // ждём секунду перед следующей итерацией
            }
            foreach (Control control in tableLayoutPanel1.Controls) // после того, как будет дана команда выйти из цикла, неплохо бы показать спрятанный контрол
            {
                ControlVisible(control, true);
            }
        }
 
        public delegate void CVDelegate (Control control, bool visible); // делегат для доступа к объектам формы из фонового потока
 
        // метод изменения свойства Visible через инвокер
        public void ControlVisible(Control control, bool visible)
        {
            try
            {
                if (control.InvokeRequired)
                {
                    CVDelegate cVDelegate = new CVDelegate(ControlVisible);
                    control.Invoke(cVDelegate, new object[] { control, visible });
                }
                else
                {
                    control.Visible = visible;
                }
            }
            catch { }
        }
 
    }
0
 Аватар для Shogun31337
557 / 534 / 225
Регистрация: 02.11.2016
Сообщений: 1,538
23.05.2018, 15:54
Цитата Сообщение от Esso11 Посмотреть сообщение
был бы благодарен если бы донесли до меня эту мысль
Цитата Сообщение от Andreyip Посмотреть сообщение
Esso11,
как то так
C#
1
2
3
4
5
6
7
public Form1()
 {
 InitializeComponent();
Form1.KeyDown+=Form_KeyDown;
label1.KeyDown+=Form_KeyDown;
button1.KeyDown+=Form_KeyDown;
 }
Для остальных компонентов так же.
Если контролов на форме много и всем по отдельности присваивать обработчик не очень хочется, то можно сократить код:
C#
1
2
3
4
5
//Перебор всех контролов
foreach(Control c in Controls) c.KeyDown += KeyDown; 
 
//Перебор всех контролов одного типа. В данном случае Label
foreach(Control c in Controls.OfType<Label>()) c.KeyDown += KeyDown;
1
182 / 145 / 94
Регистрация: 30.07.2013
Сообщений: 579
23.05.2018, 16:48
Esso11,

На форме под текстбоксом спрятаны две кнопки:

и у них есть обработчики события Click:

А в свойствах формы эти кнопки заданы как AcceptButton и CancelButton, так можно перехватывать нажатие Enter и Esc без дополнительных затрат:
0
5 / 5 / 0
Регистрация: 20.08.2017
Сообщений: 685
23.05.2018, 17:19  [ТС]
meridbt, а как кнопке задать управление вместо клика по ней, нажатие с клавиатуры кнопки ентер
0
182 / 145 / 94
Регистрация: 30.07.2013
Сообщений: 579
23.05.2018, 17:21
Esso11,

третья картинка из поста выше!
1
5 / 5 / 0
Регистрация: 20.08.2017
Сообщений: 685
23.05.2018, 17:26  [ТС]
meridbt, вопрос снят, спасибо, понял
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
23.05.2018, 17:26

Спрятать поле при нажатии на кнопку в таблице
Извините за быдло код, а консоли выводи нужный тег &lt;td&gt;, но на собыдие не реагирует &lt;?php echo &quot; ...

Нужно при нажатии на кнопку спрятать слой
вобщем нада при нажатии на кнопку спрятать слой....но чёт ни как не могу, вот как делаю я: &lt;script&gt; function showHide() { ...

Действие при нажатии кнопки на клавиатуре
Всем, добрый день Подскажите пожалуйста как мне запретить действия при нажатии клавиш? Например, при нажатии на F1 не выводить справку. ...

Запуск при нажатии кнопки на клавиатуре
Как при нажатии, например &quot;Shift+ALT&quot; выполнить эту команду? System.Diagnostics.Process.Start(&quot;D:\\Program...

При нажатии на кнопку на клавиатуре курсор перемещается вверх
Здравствуйте. Пытаюсь решить следующую задачку на андроид студио. выделяю строку в таблицы и удаляю количество. Потом записываю другое...


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

Или воспользуйтесь поиском по форуму:
29
Ответ Создать тему
Новые блоги и статьи
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru