PDA

View Full Version : edit1.onchange



farzad_az_shiraz
پنج شنبه 06 دی 1386, 18:51 عصر
من توی رویداد edit.ochange هر دستوری می نویسم فقط بار اول عمل میکنه.
مثلا وقتی می خوام چک کنم که توی edit فقط عدد وارد بشه بار دوم دیگه چک نمیکنه.
یا مثلا چک میکنم که حروف وارد نشه حالا وقتی بار اول حرفی را وارد میکنم پیغامی را که میخوام میده ولی اگر اول عدد وارد کردم و بعدش یه حروف وارد کردم دستورات onchange جواب نمی ده ؟!
ممنون میشم کمک کنید.
اینم دستوراتی که نوشتم :


if (((Edit1.Text>'a') and (Edit1.Text<'z'))or((Edit1.Text>'A') and (Edit1.Text<'Z'))) then
begin
MessageDlg('ÔãÇ ÈÇíÏ ÏÑ Çíä ˜ÇÏÑ ÚÏÏ æÇÑÏ ˜äíÏ',mtInformation,[mbok],0);
Edit1.Clear;
Edit1.SetFocus;
end

hossein taghi zadeh
پنج شنبه 06 دی 1386, 19:33 عصر
با سلام

برای اینکار بهتره از رویداد OnKeyPress استفاده کنید.
برای مثال:

Key := Chr(Byte(Key In ['0'..'9', #8]) * Ord(Key));

SYNDROME
پنج شنبه 06 دی 1386, 20:08 عصر
می توانی اینجوری هم بنویسی.


IF Key In [#48..#57] Then
Begin
// Program
End
Else
Key := #0;

موفق باشید

rasool_brn
پنج شنبه 06 دی 1386, 23:48 عصر
دلیلش اینه که در کد شما هر بار که رویداد OnChange فراخوانی می شه کل رشته داخل Edit با کاراکترهایی که در شرطها به کار بردین مقایسه می شه نه فقط کاراکتر وارد شده. مثلا اگه اول 4رو اول وارد کنین توسط Edit پدیرفته می شه و بعد که یه کاراکتر مثلا m رو وارد می کنین 4m با کاراکترهای که در شرطها به کار بردین مقایسه می شه.
بهترین کار اینه که در رویداد OnKeyPress مربوط به Edit کدی رو که آقای ُSYNDROME (http://barnamenevis.org/forum/member.php?u=35868) گفتن بنویسین.