PDA

View Full Version : اجرای یک متد یا مقدار دهی یکباره به گروهی از کنترها



hadisalahi2
سه شنبه 02 مهر 1387, 21:55 عصر
سلام .
چطوری میتونم یک متد رو به صورت یکجا به گروهی از کنترلها اعمال کنم، مثلا مثل دستور زیر رو به گروهی از کنترلها



Edit1.Clear;

یا


combobox1.Enabled:=False;


یا مانند مثال بالا مقدار یک خاصیت رو به گروهی از کنترل ها نسبت بدم.
یا حق

دنیای دلفی
سه شنبه 02 مهر 1387, 22:14 عصر
همزمان نمي شه ولي مي توني با استفاده از مقدار دهي تگها اينكار را انجام بدهي يا از روش زير استفاده كني



For i := 0 To Form1.ComponentCount-1 Do
If Form1.Components[i] is TDbEdit Then
TDbEdit(Form1.Components[i]).Enable := False;



از كدي كه گذاشتم مي توني ايده بگيري

hadisalahi2
چهارشنبه 03 مهر 1387, 14:24 عصر
من این کدها رو داخل یک پروسیجر نوشتم ، موقعی که فقط محتویات EditBox ها رو میخوام پاک کنم مشکلی وجود نداره ولی وقتی این کد رو مینویسم خطا میده



Procedure TDataBaseForm.Clear(FormName:Tform);
var i:Byte;
begin
For i := 0 To FormName.ComponentCount-1 Do
If FormName.Components[i] is TEdit Then TEdit(FormName.Components[i]).Clear;
If FormName.Components[i] is TComboBox Then TComboBox(FormName.Components[i]).Clear;
If FormName.Components[i] is TImage Then TImage(FormName.Components[i]).Picture:=nil;
If FormName.Components[i] is TMemo Then TMemo(FormName.Components[i]).Clear;
end;

پیغام خطا هم اینه



List Index Out Of Bounds(80)

AlirezaBahredar
چهارشنبه 03 مهر 1387, 14:35 عصر
معمولا این نوع Error ها ایرادات مقدار دهی نامناسب هست.مطمئن شوید از کنترل مورد نظر به تعداد صدا زده شده در حلقه For تان بروی فرمتان موجود باشد.
موفق باشید.

hadisalahi2
چهارشنبه 03 مهر 1387, 16:28 عصر
منظورتون رو از مقدار دهی نامناسب متوجه نمیشم. اگه میشه ببیشتر توضیح بدهید.

Mahmood_M
چهارشنبه 03 مهر 1387, 17:18 عصر
منظورتون رو از مقدار دهی نامناسب متوجه نمیشم. اگه میشه ببیشتر توضیح بدهید.
پیغام خطایی که شما قرار دادید در زمانی رخ میده که حلقه به مقداری برسه که وجود نداره ، منظور دوستمون هم همین بود.
اینجور که از خطا مشخصه تعداد کامپوننتهای روی فرم کمتر از 80 هست و کامپوننتی با ایندکس 80 وجود نداره ولی حلقه به عدد 80 رسیده و متغیر I عدد 80 رو گرفته ، ولی کامپوننتی که شمارش 80 باشه روی فرم نیست ، در جای دیگه مقدار ComponentsCount فرم رو بگیرید ، ببینید چند هست ، مثلا :


Caption := IntToStr(Form1.ComponentsCount);

اما کدتون فکر نکنم مشکلی داشته باشه !!

به هر حال موفق باشید ...

اصغر (پآچ)
چهارشنبه 03 مهر 1387, 21:10 عصر
سلام دوست من

ببین بهترین روشی که من برای حل این مشکل که خودم هم داشتم اینه که فرم رو آزاد کنی و اگه دوباره بهش احتیاج داشتی دوباره ایجادش کنی این خیلی بهتره چون همه متغییر ها و عناصر فرمت دوباره حالت پیش فرض میگیرن

موفق و موید باشی

hadisalahi2
پنج شنبه 04 مهر 1387, 10:29 صبح
سلام دوست من

ببین بهترین روشی که من برای حل این مشکل که خودم هم داشتم اینه که فرم رو آزاد کنی و اگه دوباره بهش احتیاج داشتی دوباره ایجادش کنی این خیلی بهتره چون همه متغییر ها و عناصر فرمت دوباره حالت پیش فرض میگیرن

موفق و موید باشی

دوست عزیز من منظورتون رو متوجه نمیشم، برای چی فرم رو آزاد کنم. من فقط میخوام بر روی کامپوننت ها یه عمل یکسانی رو انجام بدم .

Cave_Man
پنج شنبه 04 مهر 1387, 15:34 عصر
فرض کن کنترلهایی که میخای مقدار دهی بهشون بکنی مثلا مقدارشون رو پاک کنی روی یه Panel هستن
با BroadCast کردن یک Message میتونی به اهدافت برسی


var
m:Tmessage;
begin
m.Msg := WM_SETTEXT;
m.WParam := 0;
m.LParam := integer(pCHAR(''));
panel1.Broadcast(m);

برای کنترلهای روی فرم هم به همین شکل هست
برای کارهای دیگه مثل Disable کردن فقط باید message مربوطه رو پیدا کنی