PDA

Показать полную графическую версию : [решено] События при включении и отключении checkBox


ziiiro
02-04-2015, 17:16
Добрый день, помогите пожалуйста.

Имеется кусок кода. Нужно чтобы: При включении checkBox отображались все компоненты, а при снятии флажка в этом же checkBox они пропадали, т.е становились False.
Заранее спасибо.

P.S. Как включать разобрался, как отключить не могу понять((
if CheckBox1.Checked = False не срабатывает почему то... может не так реализовал сам код ?


procedure TForm1.CheckBox1Click(Sender: TObject);
begin
if CheckBox1.Checked = True
then
Label38.Visible:=True; Memo1.Visible:=True; Label3.Visible:=True; Label10.Visible:=True;
Label17.Visible:=True; ComboBox2.Visible:=True; Label38.Visible:=True;
end;

yurfed
02-04-2015, 17:36
ziiiro, забыл ужо всё, но что то кажется что условие надо продолжить. Извиняюсь если глупость сморозил, но лет 7 не брал в руки шашки :)

begin
if CheckBox1.Checked True
then
Label38.Visible:=True; Memo1.Visible:=True; Label3.Visible:=True; Label10.Visible:=True;
Label17.Visible:=True; ComboBox2.Visible:=True; Label38.Visible:=True;
else
Label38.Visible:=False; Memo1.Visible:=True; Label3.Visible:=True; Label10.Visible:=False;
Label17.Visible:=False; ComboBox2.Visible:=True; Label38.Visible:=False;
end;
Пример взят отсюда (http://www.delphibasics.ru/Else.php)
begin
// Обратите внимание на отсутствие ';' после предложения 'then'
if False
then ShowMessage('True')
Else ShowMessage('False');

// Вложенные условные операторы - Delphi заметно управляют ассоциациями
if true then
if false then
ShowMessage('Внутренний then')
Else
ShowMessage('Внутренний else')
Else
ShowMessage('Внешний else')
end;

ziiiro
02-04-2015, 17:46
Label17.Visible:=True; ComboBox2.Visible:=True; Label38.Visible:=True;
else »

Ругается на Else
[Error] Unit1.pas(163): ';' not allowed before 'ELSE'
Там видимо как то по другому прописываться должно...
Не могу понять, как )

yurfed, Попробовал так


if checkbox1.checked = True then
begin
//все компоненты выставил True
end
else
//все компоненты выставил False
end;



На код не ругается, но при запуске при нажатии на CheckBox ничего не происходит ... при включении и отключении флажка

yurfed
02-04-2015, 17:57
ziiiro, а зачем END посередине?
а так
if checkbox1.checked = True then
begin
//все компоненты выставил True
else
if checkbox1.checked = False then
//все компоненты выставил False
end;

ziiiro
02-04-2015, 19:16
Я скорее всего туплю...
end поставил так как до else идут перечисления через ';' если после этого перечисления ставить else то ошибка, если убрать ";" то тоже ошибка

yurfed, Я скорее всего туплю...
end поставил так как до else идут перечисления через ';' если после этого перечисления ставить else то ошибка, если убрать ";" то тоже ошибка

yurfed
03-04-2015, 03:38
ziiiro, забирай пример.
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TForm1 = class(TForm)
lbl1: TLabel;
chk1: TCheckBox;
procedure chk1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.chk1Click(Sender: TObject);
begin

if chk1.Checked
then
lbl1.Visible:=True //Чекбокс отмечен
else
lbl1.Visible:=False; //Чекбокс пустой

end;

end.

ziiiro
03-04-2015, 08:04
yurfed, Спасибо)


procedure TForm1.CheckBox1Click(Sender: TObject);
begin
if checkBox1.Checked
then
begin
Label38.Visible:=True; Memo1.Visible:=True; Label3.Visible:=True; Label10.Visible:=True;
Label17.Visible:=True; ComboBox2.Visible:=True; Label38.Visible:=True;
end
else
if checkBox1.Checked = False
then
begin
Label38.Visible:=False; Memo1.Visible:=False; Label3.Visible:=False; Label10.Visible:=False;
Label17.Visible:=False; ComboBox2.Visible:=False; Label38.Visible:=False;
end;
end;


Вот так, работает как часы)

opel431
05-04-2015, 10:11
Можно сделал и по иному.... это расширит количество возможных комбинаций при необходимости и сократит код при повторных вызовах
........
procedure EnabledElm(mo: Boolean; lb: Boolean; cb: Boolean); // для примера три компонента

implementation
........

{процедура: EnabledElm
Входные параметры: mo: Boolean; lb: Boolean; cb: Boolean
Результат: изменение свойства Enabled, в зависимости от условия}

procedure TMain.EnabledElm(mo: Boolean; lb: Boolean; cb: Boolean);
begin
Memo1.Enabled := mo;
Label1.Enabled := lb;
ComboBox1.Enabled := cb;
end;


Применение

// все однотипно
if checkBox1.Checked then
EnabledElm(False, False, False)
else
EnabledElm(True, True, True);

// раздельно
if checkBox1.Checked then
EnabledElm(True, False, False)
else
EnabledElm(False, False, True);




© OSzone.net 2001-2012