Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   [решено] События при включении и отключении checkBox (http://forum.oszone.net/showthread.php?t=297840)

ziiiro 02-04-2015 17:16 2491011

События при включении и отключении checkBox
 
Добрый день, помогите пожалуйста.

Имеется кусок кода. Нужно чтобы: При включении 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 2491019

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;

Пример взят отсюда
Код:

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 2491021

Цитата:

Цитата yurfed
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 2491028

ziiiro, а зачем END посередине?
а так
Код:

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


ziiiro 02-04-2015 19:16 2491058

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

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

yurfed 03-04-2015 03:38 2491223

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 2491250

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 2491930

Можно сделал и по иному.... это расширит количество возможных комбинаций при необходимости и сократит код при повторных вызовах
........
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);


Время: 12:20.

Время: 12:20.
© OSzone.net 2001-