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

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

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

Author24 — интернет-сервис помощи студентам
Всем привет, есть задание создать калькулятор, и при нажатии кнопки "Ентер" должна исчезнуть одна из кнопок калькулятора исчезает кнопка любая(т.е. рандомно или еще как-то)
Подскажите как это оформить в коде
Вот я создал примитивный калькулятор :
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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.05.2018, 16:12
Ответы с готовыми решениями:

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

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

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

Спрятать поле при нажатии на кнопку в таблице
Извините за быдло код, а консоли выводи нужный тег <td>, но на собыдие не реагирует <?php ...

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

Добавлено через 25 секунд
kingzfate, полезный совет, спасибо
0
182 / 145 / 94
Регистрация: 30.07.2013
Сообщений: 578
23.05.2018, 15:27 22
Цитата Сообщение от Esso11 Посмотреть сообщение
tableLayoutPanel1 - это что за объект на форме?
это сетка, по которой выравнены кнопки, является родительским контейнером для кнопок
0
5 / 5 / 0
Регистрация: 20.08.2017
Сообщений: 685
23.05.2018, 15:32  [ТС] 23
meridbt, если есть время весь код прокомментировать могли бы?
0
182 / 145 / 94
Регистрация: 30.07.2013
Сообщений: 578
23.05.2018, 15:46 24
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
557 / 534 / 225
Регистрация: 02.11.2016
Сообщений: 1,538
23.05.2018, 15:54 25
Цитата Сообщение от 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
Сообщений: 578
23.05.2018, 16:48 26
Esso11,

На форме под текстбоксом спрятаны две кнопки:
Спрятать кнопку на форме при нажатии кнопки  на клавиатуре

и у них есть обработчики события Click:
Спрятать кнопку на форме при нажатии кнопки  на клавиатуре

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

третья картинка из поста выше!
1
5 / 5 / 0
Регистрация: 20.08.2017
Сообщений: 685
23.05.2018, 17:26  [ТС] 29
meridbt, вопрос снят, спасибо, понял
0
23.05.2018, 17:26
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.05.2018, 17:26
Помогаю со студенческими работами здесь

Нужно при нажатии на кнопку спрятать слой
вобщем нада при нажатии на кнопку спрятать слой....но чёт ни как не могу, вот как делаю я:...

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

Запуск при нажатии кнопки на клавиатуре
Как при нажатии, например &quot;Shift+ALT&quot; выполнить эту команду?...

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


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

Или воспользуйтесь поиском по форуму:
29
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru