View Full Version : روش تغییر دادن نام شی هنگام برنامه نویسی
amirtofighi
چهارشنبه 21 فروردین 1392, 14:27 عصر
سلام
یه سوال دارم
فرض کنید توی فرم برنامه مثلا 4 تا ادیت داریم و میخوایم با توجه به ورودی کاربر یکی از اون ادیت ها فعال بشه مثلا اگه کاربر گزینه اول روانتخاب کنه، edit1 فعال بشه و الی آخر.
ولی نمیدونم چجوری میشه تو برنامه نویسی اینکارو کرد.
مثلا باید یه چیز تو این مایه ها باشه:
(فرض کنید کاربر از combobox گزینه اول رو انتخاب کرده)
self.edit[combobox1.itemindex+1].SetFocus;
که اگه درست برنامه نویسی شده بود باید جای این دستور کار میکرد:
self.edit1.SetFocus;
میشه راهنماایم کنید برنامه نویسی صحیحش چطوریه؟
ممنون
hossein_h62
چهارشنبه 21 فروردین 1392, 14:58 عصر
...
TEdit(Components[ComboBox1.ItemIndex+1]).Enabled:=True;
یوسف زالی
چهارشنبه 21 فروردین 1392, 16:16 عصر
فرض کنید 4 تا edit دارید، کدی که پیشنهاد می کنم این هست.
دلیل این کار توسعه آسان برنامه در آینده هست.
TForm1 = class(TForm)
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
Edit4: TEdit;
ComboBox1: TComboBox;
procedure FormCreate(Sender: TObject);
procedure ComboBox1Change(Sender: TObject);
private
Edits: TList;
function AddEdit(Edit: TEdit): string;
procedure SetEnableEdit;
public
{ Public declarations }
end;
.
.
.
function TForm1.AddEdit(Edit: TEdit): string;
begin
Edits.Add(Edit);
Result := Edit.Name;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
Edits := TList.Create;
ComboBox1.Clear;
ComboBox1.Items.Add(AddEdit(Edit1));
ComboBox1.Items.Add(AddEdit(Edit2));
ComboBox1.Items.Add(AddEdit(Edit3));
ComboBox1.Items.Add(AddEdit(Edit4));
end;
procedure TForm1.ComboBox1Change(Sender: TObject);
begin
SetEnableEdit;
end;
procedure TForm1.SetEnableEdit;
var
i: integer;
begin
for i := 0 to Edits.Count -1 do
TEdit(Edits[i]).Enabled := i = ComboBox1.ItemIndex;
end;
برای افزودن یک مورد دیگه کافیه که فقط یک خط بنویسید.
یکی از دلایلی که از این روش استفاده کردم این بود که با عوض شدن نام یک ادیت در همان مرحله ی کامپایل با ارور مواجه می شید قبل از اینکه برنامه به دست مشتری برسه و ران تایم بگیره.
فکر کنید اسم یک ادیت رو اصلاح کردید بعد یادتون رفت تو کمبوباکس هم عوضش کنید. اینجا اصلا کامپایل نمی شه.
خوانایی برنامه بالاتر می ره.
از ایجاد حلقه های اضافی در پیدا کردن کامپوننت اجتناب می شه.
وابستگی به ایندکس کامپوننت موجود روی فرم هم از بین می ره.
Enabled های سایر ادیت ها هم از بین می ره.
برای فوکوس شدن هم کد مشابه بنویسید.
amirtofighi
چهارشنبه 21 فروردین 1392, 17:22 عصر
You-See عزیز ممنون از کمکتون
خیلی کاربرذی بود
ولی من اون مثال رو فقط از این جهت زدم که بتونم سوالم رو خوب متوجهتون بکنم
من خیلی این قضیه برام کاربرد داره مثلا فرض کنید 40 تا Tdbtext دارم و لازمه با یک کلیک کاربر datasource بیست تا از اونها رو عوض کنم.اگه بخوام 20 تا خط برنامه بنویسم خیلی وقت گیره ولی با اون چیزی که hossein_h62 نوشت میشه با یه حلقه for چهار خطی دیتاسورس همشون رو عوض کرد.
همونطور که گفتم اینها مثل هستن و این تغییر نام خیلی جاهای دیگه هم بدرد میخوره
ممنون بازم
یوسف زالی
چهارشنبه 21 فروردین 1392, 17:28 عصر
:لبخند:
20 خط وقت گیره؟!!
تنبل هستیدا مثل من :)
می تونید مثل همون روشی که عرض کردم عمل کنید و به خواستتون برسید.
مزیتش توسعه پذیریش هست.
کد دوستمون هم درسته و کار می کنه و به جای خودش خیلی هم خوبه.
در کد نویسی خیلی مهمه که آینده نگر باشید.
به هر حال انتخاب یکی از این روشها به خودتون و کاربردش برمی گرده.
موفق و موید باشید.
SayeyeZohor
چهارشنبه 21 فروردین 1392, 21:07 عصر
روش يوسف جان بسيار مورد تاييد منه
پيشگيري بهتر از درمانه
شما بايد يادتون باشه كد كم هميشه براي نوشتن يك برنامه خوب و سريع مفيد نيست
يوسف خان يكدونه اي
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.