Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.66/29: Рейтинг темы: голосов - 29, средняя оценка - 4.66
0 / 0 / 0
Регистрация: 13.11.2013
Сообщений: 7
1

Не допустить пустой Edit

13.11.2013, 12:15. Показов 5869. Ответов 15
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте!
Немножко описания. Есть эдит в который пользователь вводит число кратное 4 или 8 в зависимости от положения в чекбоксе (изначально в эдите стоит 0). Сразу после ввода Edit1.Change значение в эдите (Int) присваивает переменной Z и не допускает разблокировку кнопок пока число в эдите не будет равно кратному 4 или 8. Стоит ограничение на ввод цифр и Backspace через Edit1.KeyPress. Установлена Delphi 7.
Суть проблемы: если пользователь удаляет символы пока поле не станет пустым - выводится ошибка, что значение в поле не соответствует переменной (ну, оно и понятно). Как описать, чтобы поле никогда не оставалось пустым?
Ну, и, собственно, немножко кода.

Глобальний var
Delphi
1
2
3
4
5
6
var
  Form1: TForm1;
  Excel, Workbook: Variant;
  q, z, c:integer;
  a, b, e:string;
  x, y:integer;
Edit1.Change
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
procedure TForm1.Edit1Change(Sender: TObject);
begin
z:=StrToInt(Edit1.Text);
if CheckBox1.Checked=false then begin
  if z mod 4 <> 0 then begin
    Panel1.Color:=clRed;
    Button1.Enabled:=false;
    Button3.Enabled:=false;
  end else
  if z mod 4 = 0 then begin
    Panel1.Color:=clLime;
    Button1.Enabled:=true;
    Button3.Enabled:=true;
    end;
end;
if CheckBox1.Checked=true then begin
  if z mod 8 <> 0 then begin
    Panel1.Color:=clRed;
    Button1.Enabled:=false;
    Button3.Enabled:=false;
  end else
  if z mod 8 = 0 then begin
    Panel1.Color:=clLime;
    Button1.Enabled:=true;
    Button3.Enabled:=true;
    end;
end;
end;
Edit1.KeyPress
Delphi
1
2
3
4
5
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if not(Key in ['0'..'9', #8]) then
    Key := #0;
end;
Операция на кнопке
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
procedure TForm1.Button1Click(Sender: TObject);
begin
q:=0;
z:=StrToInt(Edit1.Text);
 
{описание действия}
if CheckBox1.Checked=false then begin
 
Memo1.Lines.Text:=IntToStr(z)+','+IntToStr(q+1);
Memo2.Lines.Text:=IntToStr(z)+','+IntToStr(q+1);
Memo3.Lines.Text:=IntToStr(q+2)+','+IntToStr(z-1);
repeat
a:=Memo1.Lines.Text;
b:=Memo2.Lines.Text;
e:=Memo3.Lines.Text;
Memo1.Lines.Text:='';
Memo2.Lines.Text:='';
z:=z-1;
q:=q+1;
Memo1.Lines.Text:=a+','+IntToStr(q+1)+','+IntToStr(z);
Memo2.Lines.Text:=b+','+IntToStr(z-1)+','+IntToStr(q+2);
a:=Memo1.Lines.Text;
Memo1.Lines.Text:='';
Memo3.Lines.Text:='';
z:=z-1;
q:=q+1;
Memo1.Lines.Text:=a+','+IntToStr(z)+','+IntToStr(q+1);
Memo3.Lines.Text:=e+','+IntToStr(q+2)+','+IntToStr(z-1);
if q=z then Memo1.Lines.Text:=a;
if q=z then Memo2.Lines.Text:=b;
if q=z then Memo3.Lines.Text:=e;
until q=z;
 
{здесь будет ещё немного кода
end else begin
 
 
 
end;}
end;
end;
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.11.2013, 12:15
Ответы с готовыми решениями:

Как в окно Edit'а не допустить ввод букв?
как выполнить защиту от ввода в edit букв? и чтоб при этом выдавалось сообщение

Допустить ввод в Edit только определенного диапазона чисел
Подскажите как сделать чтоб можно было вводить определенный диапазон чисел... например от 1 до 9 ...

Пустой Edit. Парсер формулы из Edit
Посмотрите закоменченную строку, что в ней не так? З.Ы - можно ли как-то считать формулу из поля...

Пустой edit
Всем добрый вечер! Можете подсказать как нужно было указать если edit пустой? edit1.Text=' ' - не...

15
Почетный модератор
64300 / 47595 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
13.11.2013, 12:32 2
Просто ввел значение в Эдит и проверил
Delphi
1
2
3
4
5
6
7
8
val(Edit1.Text,z,code);
if(code<>0)or(z mod 4<>0)or(z mod 8<>0) then
 begin
  showmessage('Значение z введено неверно, повторите');
  Edit1.Clear;
  Edit1.Setfocus;
  exit
 end;
1
0 / 0 / 0
Регистрация: 13.11.2013
Сообщений: 7
13.11.2013, 12:46  [ТС] 3
Куда именно это прописать и какой переменной обозначить "code"?
0
Почетный модератор
64300 / 47595 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
13.11.2013, 13:11 4
Где будешь первый раз использовать Z, там и напиши
Delphi
1
var code:integer;
0
0 / 0 / 0
Регистрация: 13.11.2013
Сообщений: 7
13.11.2013, 13:16  [ТС] 5
Все равно выдает эту ошибку...
0
Почетный модератор
64300 / 47595 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
13.11.2013, 13:23 6
Добавь еще что z<>0
Delphi
1
if(code<>0)or(z=0)or(z mod 4<>0)or(z mod 8<>0) then
Это вообще убери
Delphi
1
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char)
А мой кусок кода вставь сюда
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
procedure TForm1.Button1Click(Sender: TObject);
begin
val(Edit1.Text,z,code);
if(code<>0)or(z mod 4<>0)or(z mod 8<>0) then
 begin
  showmessage('Значение z введено неверно, повторите');
  Edit1.Clear;
  Edit1.Setfocus;
  exit
 end;
q:=0;
z:=StrToInt(Edit1.Text); //это убрать
1
191 / 50 / 10
Регистрация: 27.09.2013
Сообщений: 516
Записей в блоге: 4
13.11.2013, 13:25 7
можно так попробовать

Delphi
1
2
if Edit1.Text='' then
 Edit1.Text:='0';
0
0 / 0 / 0
Регистрация: 13.11.2013
Сообщений: 7
13.11.2013, 13:47  [ТС] 8
Цитата Сообщение от Puporev Посмотреть сообщение
Добавь еще что z<>0
Delphi
1
if(code<>0)or(z=0)or(z mod 4<>0)or(z mod 8<>0) then
Это вообще убери
Delphi
1
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char)
А мой кусок кода вставь сюда
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
procedure TForm1.Button1Click(Sender: TObject);
begin
val(Edit1.Text,z,code);
if(code<>0)or(z mod 4<>0)or(z mod 8<>0) then
 begin
  showmessage('Значение z введено неверно, повторите');
  Edit1.Clear;
  Edit1.Setfocus;
  exit
 end;
q:=0;
z:=StrToInt(Edit1.Text); //это убрать
Это может сработать, но у меня изначально кнопки отключены, потому надо чтобы именно эдит определял число которое вводится и после введения правильного числа активировал кнопки, иначе программа будет выполнять бесконечный цикл, что естественно ничего хорошего не принесет. Попробую этот код переделать под Edit1.Change.

Добавлено через 3 минуты
Цитата Сообщение от artemka2008 Посмотреть сообщение
можно так попробовать

Delphi
1
2
if Edit1.Text='' then
 Edit1.Text:='0';
Пробовал, не получается
0
191 / 50 / 10
Регистрация: 27.09.2013
Сообщений: 516
Записей в блоге: 4
13.11.2013, 13:55 9
Цитата Сообщение от Satir4ik Посмотреть сообщение
потому надо чтобы именно эдит определял
попробуйте использовать обработчик OnChange
0
0 / 0 / 0
Регистрация: 13.11.2013
Сообщений: 7
13.11.2013, 14:05  [ТС] 10
Цитата Сообщение от artemka2008 Посмотреть сообщение
попробуйте использовать обработчик OnChange
В 1м посте описано, и даже код выложен, что я использую Edit1.OnChange для определения нужного числа, но он не срабатывает когда поле Edit1 пустое.
0
226 / 225 / 112
Регистрация: 20.10.2013
Сообщений: 808
13.11.2013, 14:08 11
Держи мой вариант, со своим разбирайся сам или давай исходник (не хочу ковыряться в коде):
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
procedure TForm1.Edit1Change(Sender: TObject);
var i,j:integer;
p:string;
begin
p:=Edit1.Text;
for i:=1 to Length(p) do
if (Edit1.Text<>'') and (Edit1.Text<>'0') and (p[i] in ['0'..'9'])
then {действие}
else
  begin
    Edit1.SetFocus;
    Edit1.Text:='5';
    Showmessage('Повторите ввод');
    Break;
  end;
end;
Немного объясню суть: даже если пользователь вставит текст в Edit то оно все сотрет и присвоит Edit'у начальное значение (в моем случае - 5) если первое число 0 тоже самое.
Вложения
Тип файла: zip Satir4ik.zip (2.1 Кб, 2 просмотров)
1
Почетный модератор
64300 / 47595 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
13.11.2013, 14:11 12
Можно и так сделать
Delphi
1
2
3
4
5
6
7
8
9
procedure TForm1.Edit1Change(Sender: TObject);
begin
if Edit1.Text='' then
  begin
    showmessage('В не ввели значение Z');
    exit
  end;
....................
end;
0
191 / 50 / 10
Регистрация: 27.09.2013
Сообщений: 516
Записей в блоге: 4
13.11.2013, 14:12 13
Satir4ik, не заметил.

как вариант в самое начало обработчика OnChange

Delphi
1
if edit1.text<>'' then begin
1
Почетный модератор
64300 / 47595 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
13.11.2013, 14:16 14
Так работает
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
var
  Form1: TForm1;
  z:integer;
implementation
 
{$R *.dfm}
 
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
var i:integer;
begin
if not(Key in ['0'..'9', #8]) then
    Key := #0;
end;
 
procedure TForm1.Edit1Change(Sender: TObject);
var z:integer;
begin
if Edit1.Text='' then
  begin
    showmessage(' íå ââåëè çíà÷åíèå Z');
    exit
  end;
 
end;
 
procedure TForm1.Button1Click(Sender: TObject);
begin
z:=StrToInt(Edit1.Text);
Edit2.Text:=IntToStr(z)
end;
0
191 / 50 / 10
Регистрация: 27.09.2013
Сообщений: 516
Записей в блоге: 4
13.11.2013, 14:16 15
Цитата Сообщение от Satir4ik Посмотреть сообщение
Сообщение от artemka2008
можно так попробовать
Delphi
1
2
if Edit1.Text='' then
*Edit1.Text:='0';
Пробовал, не получается
вы имели в виду, что ноль не появляется или что?
0
0 / 0 / 0
Регистрация: 13.11.2013
Сообщений: 7
13.11.2013, 14:59  [ТС] 16
В начало
Delphi
1
if edit1.text<>'' then begin
В конец
Delphi
1
2
3
4
5
end else begin
    Edit1.Text:='0';
    Panel1.Color:=clRed;
    Button1.Enabled:=false;
    Button3.Enabled:=false
Помогло =)
Но вылезла другая проблема, когда вводишь 0 вручную - программа срабатывает, а не должна...

Добавлено через 7 минут
Решил добавлением параметров (z=0) и (z<>0) в соответствующие исключения)

Всем большое спасибо!)
0
13.11.2013, 14:59
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.11.2013, 14:59
Помогаю со студенческими работами здесь

Edit пустой
If (Edit1='') or (Edit2='') or (Edit3='') Show.Message('Введите X, Y, Z') else ... Выдает...

Пустой edit
Подскажите, пожалуйста, что нужно написать в процедуре, чтобы пользователь не смог оставить пустой...

Пустой пароль в EDIT
Привет всем. У меня при запуске программы выходит форма авторизации. Так вот там всего два...

Игнорировать пустой Edit
Здравствуйте! Подскажите, пожалуйста, как сделать так, чтоб edit игнорировал пустую строку, то есть...


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

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