Döngüden neden çıkmıyor?
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
- OnderTastan
- Üye
- Mesajlar: 38
- Kayıt: 01 Tem 2007 05:09
- Konum: İzmir
Döngüden neden çıkmıyor?
Bu kodlarda Boş Bırakılmayan alanların döngüden çıkmasını istiyorum ama bir türlü olmadı. sürekli mesaj ekranı gelerek koşulları tekrarlıyor.
procedure TKayit_F.SayfaChange(Sender: TObject);
var
Eksik:integer;
begin
if ((GBAadi.Text='') or (GBAunvan.Text='')) and (Sayfa.ActivePageIndex <> 0) then
begin
Eksik:=Application.MessageBox('Bu alanını boş bırakılamaz !','Zorunlu Alan', MB_Ok+mb_iconstop);
Sayfa.ActivePageIndex :=0;
end
else
begin
if (GPadi.Text='') and (Sayfa.ActivePageIndex <> 1) then
begin
Eksik:=Application.MessageBox('Bu alanını boş bırakılamaz !','Zorunlu Alan', MB_Ok+mb_iconstop);
Sayfa.ActivePageIndex :=1;
end;
end;
end;
end.
procedure TKayit_F.SayfaChange(Sender: TObject);
var
Eksik:integer;
begin
if ((GBAadi.Text='') or (GBAunvan.Text='')) and (Sayfa.ActivePageIndex <> 0) then
begin
Eksik:=Application.MessageBox('Bu alanını boş bırakılamaz !','Zorunlu Alan', MB_Ok+mb_iconstop);
Sayfa.ActivePageIndex :=0;
end
else
begin
if (GPadi.Text='') and (Sayfa.ActivePageIndex <> 1) then
begin
Eksik:=Application.MessageBox('Bu alanını boş bırakılamaz !','Zorunlu Alan', MB_Ok+mb_iconstop);
Sayfa.ActivePageIndex :=1;
end;
end;
end;
end.
"Kendini Affeder Gibi Başkalarını Affet, Başkalarını Azarlar Gibi Kendini Azarla..."
- Murat DİCLE
- Kıdemli Üye
- Mesajlar: 702
- Kayıt: 19 Nis 2006 04:12
- Konum: İstanbul
- İletişim:
- OnderTastan
- Üye
- Mesajlar: 38
- Kayıt: 01 Tem 2007 05:09
- Konum: İzmir
- Murat DİCLE
- Kıdemli Üye
- Mesajlar: 702
- Kayıt: 19 Nis 2006 04:12
- Konum: İstanbul
- İletişim:
- OnderTastan
- Üye
- Mesajlar: 38
- Kayıt: 01 Tem 2007 05:09
- Konum: İzmir
- Murat DİCLE
- Kıdemli Üye
- Mesajlar: 702
- Kayıt: 19 Nis 2006 04:12
- Konum: İstanbul
- İletişim:
AllowChange:= False; dedikten sonra ayrıca Sayfa.ActivePageIndex :=0; gibi sayfa değiştirmenize gerek yok. AllowChange:= False; dedikten sonra o an hangi sayfada ise orada kalır, yeni seçilen sayfaya geçmez.
Sayfa.ActivePageIndex :=0; kodunu kullanırsanız eğer habibire, OnChange ve OnChanging event'ları tetiklenir.
Sayfa.ActivePageIndex :=0; kodunu kullanırsanız eğer habibire, OnChange ve OnChanging event'ları tetiklenir.
- OnderTastan
- Üye
- Mesajlar: 38
- Kayıt: 01 Tem 2007 05:09
- Konum: İzmir
- Murat DİCLE
- Kıdemli Üye
- Mesajlar: 702
- Kayıt: 19 Nis 2006 04:12
- Konum: İstanbul
- İletişim:
- OnderTastan
- Üye
- Mesajlar: 38
- Kayıt: 01 Tem 2007 05:09
- Konum: İzmir
Kod: Tümünü seç
procedure TKayit_F.SayfaChange(Sender: TObject);
var
Eksik:integer;
begin
if ((GBAadi.Text='') or (GBAunvan.Text='')) and (Sayfa.ActivePageIndex <> 0) then
begin
Eksik:=Application.MessageBox('Bu alanını boş bırakılamaz !','Zorunlu Alan', MB_Ok+mb_iconstop);
Sayfa.ActivePageIndex :=0;
end else
if (GPadi.Text='') and (Sayfa.ActivePageIndex <> 1) then
begin
Eksik:=Application.MessageBox('Bu alanını boş bırakılamaz !','Zorunlu Alan', MB_Ok+mb_iconstop);
Sayfa.ActivePageIndex :=1;
end;
Abort;
end;
end.
- OnderTastan
- Üye
- Mesajlar: 38
- Kayıt: 01 Tem 2007 05:09
- Konum: İzmir
- OnderTastan
- Üye
- Mesajlar: 38
- Kayıt: 01 Tem 2007 05:09
- Konum: İzmir
Bu kodlar iş görüyor ama mesaj butonu 2 defa tıklanınca ilgili sayfaya yönleniyor. Eğer bunu çözebilirsek bu da olur. Teşekkür ederim.
procedure TForm1.SayfaChange(Sender: TObject);
var
i: Integer;
begin
for i := 0 to ComponentCount - 1 do
begin
if Components is TcxTextEdit then
begin
with TcxTextEdit(Components) do
begin
if (Tag > 0) and (Text = '') then
begin
Sayfa.ActivePageIndex := Tag - 1;
ShowMessage('Boş Bu');
Exit;
end;
end;
end;
end;
end;
end.
procedure TForm1.SayfaChange(Sender: TObject);
var
i: Integer;
begin
for i := 0 to ComponentCount - 1 do
begin
if Components is TcxTextEdit then
begin
with TcxTextEdit(Components) do
begin
if (Tag > 0) and (Text = '') then
begin
Sayfa.ActivePageIndex := Tag - 1;
ShowMessage('Boş Bu');
Exit;
end;
end;
end;
end;
end;
end.
"Kendini Affeder Gibi Başkalarını Affet, Başkalarını Azarlar Gibi Kendini Azarla..."
- Murat DİCLE
- Kıdemli Üye
- Mesajlar: 702
- Kayıt: 19 Nis 2006 04:12
- Konum: İstanbul
- İletişim:


Bak şimdi, çözüme adım adım ulaşalım.
PageControl bileşeni işlemlerde hangi olayları tetikler önce ona bakalım.
PC1 adında bir PageControl'ümüz olsun. Bu PageControl'a bağlı 3 sayfamız olsun. TabSheet1, TabSheet2 ve TabSheet3.
Sen formu SHOW yaptığında ilk önce ne olur? hangi evetlar tetiklenir?
PageControl bileşeni üstünden gidiyoruz. Sadece bu bileşenin olaylarını inceleyelim.
Form ilk önce SHOW olduğunda, sırasıyle şunlar tetiklenir
Kod: Tümünü seç
PC1.OnEnter()
TabSheet1.OnShow()
TabSheet1.OnEnter()
Kod: Tümünü seç
PC1.OnChanging() //bak bunu OnChange ile karıştırma...
TabSheet2.OnShow()
TabSheet1.OnExit()
TabSheet2.OnEnter()
TabSheet1.OnHide()
PC1.OnChange()
//gördüğün gibi en son bu oluyor. demekki bu event senin işini görmez.
Kod: Tümünü seç
Hiç.. Yani PageControl ve TabSheet'lerin Evet'ları tetiklenmedi.
Sen şimdi PC1.OnChanging event'ını kullanacaksın. eğer istediğin koşullar sağlanıyorsa AllowChange := True diyeceksin. Aksi durumda AllowChange := False diyeceksin. OnChanging için PC1.ActivePageIndex := 0 gibi birşey demene gerek yok. Böyle birşeyi kullanmayacaksın. Senin yukarıdaki kodlarını OnChange yerine OnChanging'e koy. Ve yukarıdaki kodlardaki Sayfa.ActivePageIndex :=1; gibi satırlarını AllowChange := False olarak değiştir.
Ümitliyim, çözeceksin.

- OnderTastan
- Üye
- Mesajlar: 38
- Kayıt: 01 Tem 2007 05:09
- Konum: İzmir
Siz öyle zannedinÜmitliyim, çözeceksin.

Ayrıca ukalalık değil estafurullah. Sadece ben sizin kadar uzman değilim bu konuda hepsi bu. daha önce de belirttim, PageControl değil cxPageConrtol kullandım işler burda biraz karıştı.
Şu AlloweChange:=False bi türlü yediremedim. Biliyorum doğru olanı siz yapıyor, doyacağım kadar balık vermek yerine bana balık tutmayı öğretmeğe çalışıyorsunuz. sanırım ben iyi bir öğrenci değilim, görünen o. Bu kadar açıkladıktan sonra nasıl olsa anlamıştır düşüncesiyle anlatmışsınız teşekkür ederim. Ama şunu kodların içine kullanılır haliyle verseydiniz inanın neyin nereye yazıldığına bakarak bütün olayı çözmem kolay olurdu. Belki bu işin kolaycılığı.
kısa yoldan yardım istememin sebebi; fazla zamanım yok bir program yapmaya çalışıyorum bu basit şeyde takıldım kaldım. istediğim gibi bir yardımda bulunursanız çok sevinirim. ama zaten ben gereğini yaptım gerisini de sen bul diyorsanız yine de ilginize ve sabrınıza bir kez daha teşekkür ederim.
DOSTLUKLA...
"Kendini Affeder Gibi Başkalarını Affet, Başkalarını Azarlar Gibi Kendini Azarla..."
Re: Döngüden neden çıkmıyor?
Kod: Tümünü seç
procedure TKayit_F.SayfaChange(Sender: TObject);
var
Eksik:integer;
begin
if ((GBAadi.Text='') or (GBAunvan.Text='')) and (Sayfa.ActivePageIndex <> 0) then
begin
Eksik:=Application.MessageBox('Bu alanını boş bırakılamaz !','Zorunlu Alan', MB_Ok+mb_iconstop);
Sayfa.ActivePageIndex :=0;
end
else
begin
if (GPadi.Text='') and (Sayfa.ActivePageIndex <> 1) then
begin
Eksik:=Application.MessageBox('Bu alanını boş bırakılamaz !','Zorunlu Alan', MB_Ok+mb_iconstop);
Sayfa.ActivePageIndex :=1;
end;
end;
end;
end
ActivePageIndex:=0 yerine AllowChange:=False kullanıp bu kodu OnChanging olayına yazacaksın diyor arkadaş. ayrıca program yazarken
begin end bloklarını @Glen arkadaşımızın mesajındaki gibi girintili çıkıntılı yazma alışkanlığını edinmen büyük kod bloklarında rahatlık sağlayacaktır. iyi çalışmamalar
