Belli Sayıda CheckBox Seçince Diğerleri False

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Firarist
Üye
Mesajlar: 129
Kayıt: 13 Eki 2003 06:41
Konum: Antalya
İletişim:

Belli Sayıda CheckBox Seçince Diğerleri False

Mesaj gönderen Firarist »

Arkadaşlar
Örneğin 5 adet CheckBox'tan herhangi iki tanesi seçildiğinde seçilmeyen 3 tenesinin False olmasını nasıl sağlayabilirim?
İlginize şimdiden teşekkürler
Kullanıcı avatarı
cuneyt22
Üye
Mesajlar: 213
Kayıt: 07 Şub 2004 03:32
İletişim:

Mesaj gönderen cuneyt22 »

kardeş if checkbox1.check=true then ise onların visible yada enable ozelliklerini true yaparsın degilse false yaparsın..yanı işaretli ise true yukardaki gibi degilse false yap biter
Firarist
Üye
Mesajlar: 129
Kayıt: 13 Eki 2003 06:41
Konum: Antalya
İletişim:

Mesaj gönderen Firarist »

Bu saatte ilgilenip cevap yazdığınız için teşekkürler.
Ancak yapmak istediğim Veritabanından belli alanları yazdırmak istiyorum ve en çok kullanıcıya 3 alan seçimi yaptırmalıyım. Yani kullanıcı CheckBoxlardan herhangi 3 ünü işaretlediğinde diğerleri false olsun istiyorum.
Kullanıcı avatarı
onselder
Üye
Mesajlar: 54
Kayıt: 09 Şub 2005 05:56
Konum: samsun
İletişim:

Mesaj gönderen onselder »

sana tavsiyem bi değidken tanmımla bunu sıfıra eşitle;
checkboxların chance olayına da

if checked then
begin
degisken:=degisken+1;
if degisken>3 then showmessage('en fazla 3 tane girebilirsiniz')
else
ne olmasını istiyosan

gibi birşey düşündüm ben

kolay gele...
Kullanıcı avatarı
ovural
Üye
Mesajlar: 167
Kayıt: 22 Eki 2003 10:20
İletişim:

Mesaj gönderen ovural »

bu işini görür sanırım

Kod: Tümünü seç

var
  Form1: TForm1;
  a:array [1..3] of integer;
  degisiyor:Boolean;

implementation

{$R *.dfm}

procedure TForm1.FormActivate(Sender: TObject);
begin
a[1]:=-1;
a[2]:=-1;
a[3]:=-1;
end;

procedure TForm1.CheckBox1Click(Sender: TObject);
var i,z:byte;
begin
  if degisiyor then exit;
  degisiyor:=True;
  for i:=1 to 3 do
     if a[i]=-1 then break;
  if i>3 Then
  Begin
     // daha önce işaretlimi değilmi ?
     for z:=1 to 3 do
        if (Sender as TCheckBox).ComponentIndex=a[z] then break;
     if z<4 then
        a[z]:=-1
     else
     Begin
     (Form1.Components[a[1]] as TCheckBox).Checked:=False;
     a[1]:=a[2];
     a[2]:=a[3];
     a[3]:=(Sender as TCheckBox).ComponentIndex;
     End;
  End
  else
     a[i]:=(Sender as TCheckBox).ComponentIndex;
  degisiyor:=false;
end;
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4740
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Mesaj gönderen mrmarman »

Merhaba...
- @cuneyt22, yaklaşım güzel... Her check sonrası yeni bir checkbox denetimi serbest bırakılır şeklinde anladım ama seçenek sıralı olacağından kullanıcıyı kısıtlar...

- @onselder, yaklaşım doğru fakat uyarıdan önce o checkbox da işaretlenmiş olur. Ek bir operasyonla check'i kaldırman lazım. :idea:

- @ovural, yaklaşımın güzel, 3 sayacını geçtiğin işaretleniyor, ilk işaretlenenin işareti kaldırılıyor. :idea:

- Başka bir bakış açısı ile örneklemek ve bir konuyu açıklamak istedim... Bu konu CONST ifadesinin işlevi hakkında...

- Const ifadesinin anlamı Constant yani sabittir. Sabit demek ilk bakışta değişmez demek gibi bir anlam doğuruyor ama aslında her zaman ilk değer verildiğine işarettir.

- Biz şu opsiyonumuzu kullandık. Procedure ilk çalıştığı zaman ilk değer alacak ama bir sonraki seferlerde, ilk değer alımı yapılmayıp, en son bırakılan değeri kullanmasını sağlıycaz... En son değeri sabitliycez... :lol:

- Bu işlem için hangi değişken(leri) kullanmak istersek onu {$J..} ile blokluyoruz...

- Bu sayede bu procedure her çalıştığında eski değeri korunmuş oluyor. Yani sabit demek, eski değeri koruma (sabitleme) anlamında sabit. :lol: Daha fazla kafa karıştırmayayım, koda geçeyim...

- Burada bir sayacımız var. Bunu sabitleyip ilk değer olarak 0 veriyoruz. Eğer varsayılan kadar CheckBox'un işaretliyse o sayıyı ilk değer olarak vermelisin. Yani program çalıştığında 3 tane işaretli ise bu sayaca 3 ver ki iş görsün.

- Kontrol edeceğin ilk CheckBox'un OnClick olayına aşağıdakini istisnasız aynen yaz.

- Form üzerinde kontrol etmek istediğin başka kaç tane CheckBox daha varsa bunların her birinin OnClick olaylarındaki açılır liste kutusunu açıp, bu ilk oluşturduğunun (örneğin CheckBox1Click) procedure adını seç.

- Bu işlem artık otomatik kendi kendine oldu, başka kod yazmana gerek yok. Artık CheckBox sayılmayacak yapılan işlem sayılacak... 8)

Kod: Tümünü seç

procedure TForm1.CheckBox1Click(Sender: TObject);
Const
{$J+} Sayac : Integer = 0; {$J-}
begin
  If TCheckBox(sender).Tag = 0 then
  begin
    If NOT TCheckBox(sender).Checked
      then Dec(Sayac)
      else If Sayac = 3 then
           begin
             // Kendi kendini de tetikleyeceğinden
             // kontrol koyduk ki, sadece kullanıcı
             // Check ettiğinde değerlendirilsin...
             TCheckBox(sender).Tag := 1;
             TCheckBox(sender).Checked := False;
           end
           else Inc(Sayac);
  end
  else TCheckBox(sender).Tag := 0;
end;
Resim
Resim ....Resim
Firarist
Üye
Mesajlar: 129
Kayıt: 13 Eki 2003 06:41
Konum: Antalya
İletişim:

Mesaj gönderen Firarist »

İlgilenen arkadaşlar sonsuz saygılar sunuyorum. Ne zaman geldiysen istisnasız her problemim burada çözüldü.

mrmcop arkadaşın verdiği kodlar tam istediğimi yerine getiriyor. TEŞEKKÜRLER
Cevapla