0 / 0 / 0
Регистрация: 28.03.2013
Сообщений: 7

Запретить ввод в Edit символов, кроме цифр и знаков арифметических операций

28.03.2013, 17:34. Показов 11382. Ответов 16
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
в программировании чайник. Написал калькулятор столкнулся с такой проблемой.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
28.03.2013, 17:34
Ответы с готовыми решениями:

Как при работе в GUI с Edit можно запретить ввод всех символов, кроме 1 точки и цифр
Здравствуйте, подскажите ,пожалуйста, как в MATLAB'е при работе в GUI с Edit можно было запретить ввод всех символов кроме 1 точки и цифр.

TextField запретить ввод всех символов кроме цифр и '-'
Требуется наложить на TextField условие ввода, которое разрешает вводить только цифры и знак минус в начале строки (отрицательное число)....

Как в javaFX запретить ввод в TextField символов кроме цифр и точки?
в javaFX сделать запрет на ввод символов кроме цифр и точки пишу такой код: TextField1.setOnKeyTyped(new...

16
 Аватар для Waddonator
969 / 644 / 97
Регистрация: 01.11.2012
Сообщений: 1,447
28.03.2013, 18:04
Обрабатываете событие "нажатие клавиши Edit'а", если символ Вас не устраивает - не пишете его.

Delphi
1
2
3
4
5
6
7
8
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
   if Key in ['1'..'9','-','+','*','/',#8] then
      begin
         //можно здесь ничего не делать
      end
   else Key:=#0;
end;
1
0 / 0 / 0
Регистрация: 28.03.2013
Сообщений: 7
28.03.2013, 18:59  [ТС]
Цитата Сообщение от Waddonator Посмотреть сообщение
Обрабатываете событие "нажатие клавиши Edit'а", если символ Вас не устраивает - не пишете его.

Delphi
1
2
3
4
5
6
7
8
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
   if Key in ['1'..'9','-','+','*','/',#8] then
      begin
         //можно здесь ничего не делать
      end
   else Key:=#0;
end;
#8 и #0 это для чего?
0
 Аватар для Waddonator
969 / 644 / 97
Регистрация: 01.11.2012
Сообщений: 1,447
28.03.2013, 19:03
#0 - обнуление клавиши, если она не соответствует, #8 - BackSpace, если нужно удалить последний символ.
0
0 / 0 / 0
Регистрация: 28.03.2013
Сообщений: 7
28.03.2013, 19:06  [ТС]
буквы все равно вводятся
0
 Аватар для Waddonator
969 / 644 / 97
Регистрация: 01.11.2012
Сообщений: 1,447
28.03.2013, 19:10
Вы уверены, что данный код помещен в нужное событие? У меня в Edit'е ничего, кроме описанного в квадратных скобках не вводится.
0
0 / 0 / 0
Регистрация: 28.03.2013
Сообщений: 7
28.03.2013, 19:15  [ТС]
Delphi
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
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Menus, StdCtrls, XPMan, jpeg, ExtCtrls;
 
type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Button4: TButton;
    Button5: TButton;
    Button6: TButton;
    Button7: TButton;
    Button8: TButton;
    Button9: TButton;
    Button10: TButton;
    Button11: TButton;
    Button12: TButton;
    Button13: TButton;
    Button14: TButton;
    Button15: TButton;
    Button17: TButton;
    Button18: TButton;
    Edit1: TEdit;
    Image1: TImage;
    procedure Button7Click(Sender: TObject);
    procedure Button8Click(Sender: TObject);
    procedure Button9Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure Button5Click(Sender: TObject);
    procedure Button6Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button10Click(Sender: TObject);
    procedure Button11Click(Sender: TObject);
    procedure Button17Click(Sender: TObject);
    procedure Button12Click(Sender: TObject);
    procedure Button13Click(Sender: TObject);
    procedure Button14Click(Sender: TObject);
    procedure Button15Click(Sender: TObject);
    procedure Button18Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure Edit1KeyPress(Sender: TObject; var Key: Char);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
  kod: char;
  x,y,z,d,e: real;
 
implementation
 
{$R *.dfm}
 
procedure TForm1.FormCreate(Sender: TObject);
begin
form1.Height:=277;
form1.Width:=258;
end;
 
procedure TForm1.Button7Click(Sender: TObject);
begin
edit1.Text:=edit1.Text+'1';
end;
 
procedure TForm1.Button8Click(Sender: TObject);
begin
edit1.Text:=edit1.Text+'2';
end;
 
procedure TForm1.Button9Click(Sender: TObject);
begin
edit1.Text:=edit1.Text+'3';
end;
 
procedure TForm1.Button4Click(Sender: TObject);
begin
edit1.Text:=edit1.Text+'4';
end;
 
procedure TForm1.Button5Click(Sender: TObject);
begin
edit1.Text:=edit1.Text+'5';
end;
 
procedure TForm1.Button6Click(Sender: TObject);
begin
edit1.Text:=edit1.Text+'6';
end;
 
procedure TForm1.Button1Click(Sender: TObject);
begin
edit1.Text:=edit1.Text+'7';
end;
 
procedure TForm1.Button2Click(Sender: TObject);
begin
edit1.Text:=edit1.Text+'8';
end;
 
procedure TForm1.Button3Click(Sender: TObject);
begin
edit1.Text:=edit1.Text+'9';
end;
 
procedure TForm1.Button10Click(Sender: TObject);
begin
edit1.Text:=edit1.Text+'0';
end;
 
procedure TForm1.Button11Click(Sender: TObject);
begin
edit1.Text:=edit1.Text+',';
end;
 
procedure TForm1.Button17Click(Sender: TObject);
begin
edit1.Clear;
end;
 
procedure TForm1.Button12Click(Sender: TObject);
begin
if edit1.Text<>'' then x:=strtofloat(edit1.text);
kod:='+';
edit1.Clear;
 
end;
 
procedure TForm1.Button13Click(Sender: TObject);
begin
if edit1.Text<>'' then x:=strtofloat(edit1.text);
kod:='-';
edit1.Clear;
end;
 
procedure TForm1.Button14Click(Sender: TObject);
begin
if edit1.Text<>'' then x:=strtofloat(edit1.text);
kod:='*';
edit1.Clear;
end;
 
procedure TForm1.Button15Click(Sender: TObject);
begin
if edit1.Text<>'' then x:=strtofloat(edit1.text);
kod:='/';
edit1.Clear;
end;
 
 
procedure TForm1.Button18Click(Sender: TObject);
begin
if edit1.Text<>'' then  y:=strtofloat(edit1.text);
case kod of
    '+': z:=x+y;
    '-': z:=x-y;
    '*': z:=x*y;
    '/': z:=x/y;
end;
edit1.Text:=floattostr(z) 
end;
 
 
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
     if Key in ['1','2','3','4','5','6','7','8','9','0','-','+','*','/',#8] then
      begin
      end
   else Key:=#0;
end;
 
end.
0
Пишу на Delphi...иногда
 Аватар для cotseec
1423 / 1278 / 286
Регистрация: 03.12.2012
Сообщений: 3,914
Записей в блоге: 5
28.03.2013, 19:17
Delphi
1
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
дописано руками, а надо через инспектор объектов (два раза кликнуть на евент эдита OnKeyPress) заодно и остальные эдиты подключить на этот обработчик
0
0 / 0 / 0
Регистрация: 28.03.2013
Сообщений: 7
29.03.2013, 07:42  [ТС]
Цитата Сообщение от cotseec Посмотреть сообщение
Delphi
1
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
дописано руками, а надо через инспектор объектов (два раза кликнуть на евент эдита OnKeyPress) заодно и остальные эдиты подключить на этот обработчик
так то там и делал))

Добавлено через 44 минуты
апну

Добавлено через 11 часов 38 минут
апну
0
0 / 0 / 0
Регистрация: 28.03.2013
Сообщений: 7
02.04.2013, 07:56  [ТС]
апну
0
 Аватар для leejack
192 / 173 / 37
Регистрация: 19.01.2010
Сообщений: 610
Записей в блоге: 1
02.04.2013, 08:15
cotseec, Предлагаю упрастить код немного!)))

Delphi
1
2
3
4
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
     if not (Key in ['1'..'9','-','+','*','/',#8]) then Key:=#0;
end;
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33419 / 21526 / 8239
Регистрация: 22.10.2011
Сообщений: 36,932
Записей в блоге: 12
02.04.2013, 10:22
Упростил? Попробуй ввести 100 теперь
1
 Аватар для Waddonator
969 / 644 / 97
Регистрация: 01.11.2012
Сообщений: 1,447
02.04.2013, 10:32
Это всего-лишь маленькая неточность - нужно в перечень разрешенных символов добавить "0". ;-)
0
Модератор
10451 / 5746 / 3409
Регистрация: 17.08.2012
Сообщений: 17,480
02.04.2013, 10:41
По-моему, нужно подходить чуть глобальнее... А если в Edit1 что-нибудь через контекстное меню (правой кнопкой мыши) вставить, где будут Ваши бдительные кейпрессы? Лучше обрабатывать событие Edit1Change, тогда ничего лишнего точно не проскочит. Так, например:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
procedure TForm1.Edit1Change(Sender: TObject);
var i: integer;
    s: string;
begin
i := 1;
s := Edit1.Text;
while i <= length(s) do begin
  if not (s[i] in ['0'..'9','-','+','*','/',#8]) then Delete(s, i, 1);
  i := i + 1;
end;
Edit1.Text := s;
//перемещение курсора в последнюю позицию Edit1.Text
//установка выделения с последней позиции, туда же и курсор переместится
Edit1.SelStart:=length(Edit1.Text);
//выделить 0 символов
Edit1.SelLength := 0; 
end;
gorschok, а как запретить ввод, например, 5+*-/+4 вот такой бяки, надеюсь, напишете.

Всего всем доброго.
1
0 / 0 / 0
Регистрация: 28.03.2013
Сообщений: 7
02.04.2013, 14:59  [ТС]
Спасибо все работает а как все таки запретить
Цитата Сообщение от Cyborg Drone Посмотреть сообщение
5+*-/+4
?
0
 Аватар для leejack
192 / 173 / 37
Регистрация: 19.01.2010
Сообщений: 610
Записей в блоге: 1
02.04.2013, 15:59
Цитата Сообщение от UI Посмотреть сообщение
Упростил? Попробуй ввести 100 теперь
Я не посмотрел что там 0 не указан(((...
0
Модератор
10451 / 5746 / 3409
Регистрация: 17.08.2012
Сообщений: 17,480
02.04.2013, 16:48
Цитата Сообщение от Cyborg Drone Посмотреть сообщение
if not (s[i] in ['0'..'9','-','+','*','/',#8]) then Delete(s, i, 1);
Да и вот ещё, уточнение. #8 здесь ни к чему: к этому моменту Edit1 уже Change... Так лучше:
Delphi
1
  if not (s[i] in ['0'..'9','-','+','*','/']) then Delete(s, i, 1);
Добавлено через 2 минуты
gorschok, напишите формат ввода. Что там у Вас в Edit и в каком виде вводится.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
02.04.2013, 16:48
Помогаю со студенческими работами здесь

Как запретить ввод букв и других символов кроме цифр в поле ввода (Entry)
Всем доброго времени суток. Нужна помощь!!! Пишу программу и она должна проводить математические операций с введенными значениями в поле...

Поиск букв, цифр и знаков арифметических операций в строке
Задание: Есть символьный массив(строка) из латинских букв, цифр и знаков арифметических операций. Разработать программу, которая выведет...

Множества: удалить из массива все повторные вхождения цифр и знаков арифметических операций
Привет всем, помогите пожалуйста, не могу никак закончить. Уже пробовал и рекурсией и всем чем только можно. function...

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

Запретить ввод всего кроме цифр на jQuery
Как это сделать простым методом


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

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

Новые блоги и статьи
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru