Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/9: Рейтинг темы: голосов - 9, средняя оценка - 5.00
1 / 1 / 0
Регистрация: 06.04.2020
Сообщений: 119

Почему дублируется вывод в TextBox

13.03.2021, 20:16. Показов 2188. Ответов 19
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
1) Помогите почему дублируется вывод в TextBox
2) Подскажите , почему у меня цвет клавиш не меняется , когда опять нажмешь на клавишу?
3) Как можно сделать так, что при долгом нажатии на клавишу у меня выводилось в TextBox только одно значение (символ), а не целый ряд одного и того же
Вложения
Тип файла: rar Программа 2.0 — копия.rar (269.9 Кб, 9 просмотров)
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
13.03.2021, 20:16
Ответы с готовыми решениями:

Почему отличается вывод в Immediate и TextBox?
При выводе текстовой переменной, получающей из БД Access поле в формате "Поле МЕМО" получаются разные результаты. ApiDeclarationsf...

Почему x дублируется(повторяется 00 11 33 44)?
class MultiFor { public static void main (String args) { for(int x = 0;x<4;x++) { for(int y =4;y>2;y--) { System.out.println(x +...

Почему дублируется запрос
Это запрос на вывод средств, отправляется заявка в админку и дубрлируется оказывается две заявки php 5.6 <?php include...

19
1497 / 1238 / 245
Регистрация: 04.04.2011
Сообщений: 4,363
14.03.2021, 00:48
Цитата Сообщение от _HOBUCHOK_ Посмотреть сообщение
Помогите почему дублируется вывод в TextBox
- Неверный код в обработчике событий бокса. Например, в KeyDown.
- Или два обработчика KeyDown и KeyPress, в каждом из которых введенный символ суется в бокс.
- В обработчике события вызывается некая функция, которая лепит лишний символ
Цитата Сообщение от _HOBUCHOK_ Посмотреть сообщение
Подскажите , почему у меня цвет клавиш не меняется , когда опять нажмешь на клавишу?
У Вас клавиатура с изменяющимся цветом клавиш ?
Цитата Сообщение от _HOBUCHOK_ Посмотреть сообщение
Как можно сделать так, что при долгом нажатии на клавишу у меня выводилось в TextBox только одно значение (символ), а не целый ряд одного и того же
Настройкой интервала повторения нажатия клавиш Windows. У Вас, вероятно, установлена минимально возможная. Увеличьте ее. Можно это сделать программно, но, полагаю, что Вам поможет простая настройка клавиатуры.
0
1 / 1 / 0
Регистрация: 06.04.2020
Сообщений: 119
14.03.2021, 09:50  [ТС]
Цитата Сообщение от MsGuns Посмотреть сообщение
Настройкой интервала повторения нажатия клавиш Windows. У Вас, вероятно, установлена минимально возможная. Увеличьте ее. Можно это сделать программно, но, полагаю, что Вам поможет простая настройка клавиатуры.
А как это можно сделать программно?
0
 Аватар для samana
2639 / 1567 / 853
Регистрация: 23.02.2019
Сообщений: 3,876
14.03.2021, 10:47
Цитата Сообщение от _HOBUCHOK_ Посмотреть сообщение
1) Помогите почему дублируется вывод в TextBox
2) Подскажите , почему у меня цвет клавиш не меняется , когда опять нажмешь на клавишу?
Причина одна, вы дважды подписали форму на событии KeyDown.
Первый раз в свойствах формы


второй раз в самом коде
public Form1()
{
InitializeComponent();
time = 0;
up = false;
this.KeyDown += new KeyEventHandler(Form1_KeyDown);
this.KeyUp += new KeyEventHandler(Form1_KeyUp);
}
Цитата Сообщение от _HOBUCHOK_ Посмотреть сообщение
3) Как можно сделать так, что при долгом нажатии на клавишу у меня выводилось в TextBox только одно значение (символ), а не целый ряд одного и того же
Ответ можно найти в сети, например здесь https://stackoverflow.com/ques... ox-control
1
 Аватар для samana
2639 / 1567 / 853
Регистрация: 23.02.2019
Сообщений: 3,876
14.03.2021, 11:53
Лучший ответ Сообщение было отмечено _HOBUCHOK_ как решение

Решение

Так же вы можете сократить код, убрав громадный switch.
Для этого воспользуйтесь словарём (Dictionary), с помощью которого можно создать ассоциацию кнопок на форме с нажатыми клавишами.

Создаёте словарь и заполняете его в конструкторе

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
private Dictionary<Keys, Control> _keyMap;
 
public Form1()
{
    InitializeComponent();
    time = 0;
    up = false;
    this.KeyDown += new KeyEventHandler(Form1_KeyDown);
    this.KeyUp += new KeyEventHandler(Form1_KeyUp);
 
    _keyMap = new Dictionary<Keys, Control>();
    _keyMap.Add(Keys.A, button1);
    _keyMap.Add(Keys.S, button2);
    _keyMap.Add(Keys.D, button3);
    _keyMap.Add(Keys.F, button6);
    _keyMap.Add(Keys.G, button5);
    _keyMap.Add(Keys.H, button4);
    _keyMap.Add(Keys.J, button9);
    _keyMap.Add(Keys.K, button8);
    _keyMap.Add(Keys.L, button7);
    _keyMap.Add(Keys.Z, button22);
    _keyMap.Add(Keys.X, button21);
    _keyMap.Add(Keys.C, button20);
    _keyMap.Add(Keys.V, button19);
    _keyMap.Add(Keys.B, button18);
    _keyMap.Add(Keys.N, button17);
    _keyMap.Add(Keys.M, button16);
    _keyMap.Add(Keys.LWin, button42);
    _keyMap.Add(Keys.Q, button32);
    _keyMap.Add(Keys.W, button31);
    _keyMap.Add(Keys.E, button30);
    _keyMap.Add(Keys.R, button29);
    _keyMap.Add(Keys.T, button28);
    _keyMap.Add(Keys.Y, button27);
    _keyMap.Add(Keys.U, button26);
    _keyMap.Add(Keys.I, button25);
    _keyMap.Add(Keys.O, button24);
    _keyMap.Add(Keys.P, button23);
    _keyMap.Add(Keys.D1, button59);
    _keyMap.Add(Keys.D2, button58);
    _keyMap.Add(Keys.D3, button57);
    _keyMap.Add(Keys.D4, button56);
    _keyMap.Add(Keys.D5, button55);
    _keyMap.Add(Keys.D6, button54);
    _keyMap.Add(Keys.D7, button53);
    _keyMap.Add(Keys.D8, button52);
    _keyMap.Add(Keys.D9, button51);
    _keyMap.Add(Keys.D0, button63);
}
затем метод обработки нажатия клавиши сокращается до

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
private void Form1_KeyDown(object sender, KeyEventArgs e)
{
    if (!up)
    {
        up = true;
        time = System.Environment.TickCount;
 
    }
 
    Control button = _keyMap[e.KeyCode];
    button.BackColor = button.BackColor != Color.Red ? Color.Red : Color.Green;
    textBox1.Text = " < " + e.KeyCode + " > " + textBox1.Text;
}
Так же у вас неверно считается время, но это уже другая история.
1
1 / 1 / 0
Регистрация: 06.04.2020
Сообщений: 119
14.03.2021, 12:39  [ТС]
Спасибо вам большое, особенно за то что можно упростить switch. А почему время считается не правильно?
0
 Аватар для samana
2639 / 1567 / 853
Регистрация: 23.02.2019
Сообщений: 3,876
14.03.2021, 12:52
Цитата Сообщение от _HOBUCHOK_ Посмотреть сообщение
А почему время считается не правильно?
Возможно я не понял что именно показывает это время по задумке, я думал там должно быть время между нажатиями клавиш.
0
1 / 1 / 0
Регистрация: 06.04.2020
Сообщений: 119
14.03.2021, 12:55  [ТС]
Тут время должно считать по тому, сколько была нажата клавиша
0
 Аватар для samana
2639 / 1567 / 853
Регистрация: 23.02.2019
Сообщений: 3,876
14.03.2021, 12:56
Цитата Сообщение от _HOBUCHOK_ Посмотреть сообщение
Тут время должно считать по тому, сколько была нажата клавиша
А, тогда другое дело.
0
1 / 1 / 0
Регистрация: 06.04.2020
Сообщений: 119
14.03.2021, 13:03  [ТС]
Минус словаря только то что он не принимает специальные клавиши (Shift, Ctrl, Alt .....) Или я что-то не так сделал:
C#
1
2
3
 _keyMap.Add(Keys.LShiftKey, button36); // Лeвый Shift
            _keyMap.Add(Keys.LControlKey, button40); //Левый CTRL
            _keyMap.Add(Keys.Alt, button43); // Alt
0
 Аватар для samana
2639 / 1567 / 853
Регистрация: 23.02.2019
Сообщений: 3,876
14.03.2021, 13:33
Это не в словаре причина. Клавиши модификаторы (shift, alt, control) обрабатываются немного иначе.
Даже если вы при нажатии клавиши левого shift выведите в консоль значение этой клавиши, то получите Keys.ShiftKey, а не как ожидали Keys.LShiftKey.
1
1 / 1 / 0
Регистрация: 06.04.2020
Сообщений: 119
14.03.2021, 13:40  [ТС]
Это понятно, но у меня по 2 Shift и т.д. и как тогда сделать, что при нажатии правого Shift загоралась правая кнопка Shift?
И тогда не работают Клавиши Enter и стрелки(вверх, вниз, влево и вправо), а также PrintScreen.
и вопрос не в тему я не могу найти клавишу (Fn)
0
 Аватар для samana
2639 / 1567 / 853
Регистрация: 23.02.2019
Сообщений: 3,876
14.03.2021, 14:01
На счёт этого я не знаю, не углублялся в эту сторону. Скорее всего клавиши стрелок, энтер и т.п. уже автоматически делают что-то друге, например - перемещение фокуса с контрола на контрол по текущей форме.
0
1 / 1 / 0
Регистрация: 06.04.2020
Сообщений: 119
14.03.2021, 14:19  [ТС]
Я вас уже достал наверно)), но вы не знаете клавишу Fn в С# как называется/обозначается
0
 Аватар для samana
2639 / 1567 / 853
Регистрация: 23.02.2019
Сообщений: 3,876
14.03.2021, 15:06
Цитата Сообщение от _HOBUCHOK_ Посмотреть сообщение
вы не знаете клавишу Fn в С# как называется/обозначается
Я только сегодня от вас узнал о существовании такой клавиши.

Добавлено через 22 минуты
Цитата Сообщение от _HOBUCHOK_ Посмотреть сообщение
не работают Клавиши Enter и стрелки(вверх, вниз, влево и вправо)
Немного повозился и оказалось, что действительно эти клавиши автоматически переключают фокус между контролами на форме.
Была идея запретить контролам вообще реагировать на фокус и это сработало, почти. Стрелки и энтер теперь ловятся, но PrintScreen по-прежнему сопротивляется.

Этот цикл выполняется при загрузке формы, здесь для всех контролов этой формы - выключается фокус
C#
1
2
3
4
5
6
7
using System.Reflection;
 
foreach (Control item in Controls)
{
    MethodInfo methodInfo = typeof(Control).GetMethod("SetStyle", BindingFlags.Instance | BindingFlags.NonPublic);
    methodInfo?.Invoke(item, new object[] { ControlStyles.Selectable, false });
}
1
1 / 1 / 0
Регистрация: 06.04.2020
Сообщений: 119
14.03.2021, 15:28  [ТС]
Цитата Сообщение от samana Посмотреть сообщение
using System.Reflection;
C#
1
2
3
4
5
foreach (Control item in Controls)
{
    MethodInfo methodInfo = typeof(Control).GetMethod("SetStyle", BindingFlags.Instance | BindingFlags.NonPublic);
    methodInfo?.Invoke(item, new object[] { ControlStyles.Selectable, false });
}
А куда именно вставить этот цикл поставить

Добавлено через 7 минут
Для PrintScreen , я сделал так, так же для Ctrl, Alt.....

C#
1
2
3
4
5
6
 switch(e.KeyCode)
            {
                case Keys.PrintScreen:   //PrintScreen
                    button79.BackColor = Color.Green;
                    textBox1.Text = " < " + e.KeyCode + " > " + textBox1.Text;
                    break;
0
 Аватар для samana
2639 / 1567 / 853
Регистрация: 23.02.2019
Сообщений: 3,876
14.03.2021, 15:28
Можно прямо в конструктор добавить. Или подписать форму на Load и выполнить уже там.
1
1 / 1 / 0
Регистрация: 06.04.2020
Сообщений: 119
14.03.2021, 15:59  [ТС]
Цитата Сообщение от samana Посмотреть сообщение
Можно прямо в конструктор добавить. Или подписать форму на Load и выполнить уже там.
А можно для тупых)) а то я его разместил, но не чего не работает

Добавлено через 27 минут
пытался сделать то, чтобы не дублировались буква и т.д. при долгом нажатии клавиши по вашей ссылке
https://stackoverflow.com/ques... ox-control
Но из за коллекции возникают ошибки
0
 Аватар для samana
2639 / 1567 / 853
Регистрация: 23.02.2019
Сообщений: 3,876
14.03.2021, 16:39
Конструктор это метод с именем класса, этот метод у вас был, там же запонялся словарь для клавиш
C#
1
public Form1()
На счёт дублирования буквы пока не могу подсказать, так как сам не пробовал и возможно там действительно не всё так гладко.
1
1 / 1 / 0
Регистрация: 06.04.2020
Сообщений: 119
14.03.2021, 16:58  [ТС]
Все равно большое спасибо, очень помогли))
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
14.03.2021, 16:58
Помогаю со студенческими работами здесь

Почему дублируется $http запрос ?
Всем привет! Вот код catalogControllers.controller('Catalog', ; }; $scope.addToFavorite = function...

Дублируется вывод
Как избавиться от дублирования ответов?

Почему в yii1 дублируется начальный адрес в пагинации?
Добрый день, Есть такая проблема, для всех ссылок createUrl выводится нормально, именно в пагинации, генерируются странные ссылки с...

Почему в файл значение дублируется (записывается дважды)?
Суть: при чтении с файла f записываю данные(числа) в массив a. Потом значения этого массива по очереди записываю в файл f1 и f2. Все...

Дублируется вывод буквы
Почему выводится буква дважды? Вот код и вывод консоли: #include &lt;stdio.h&gt; int main(void) { char charCode; ...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru