PDA

View Full Version : سوال: آیا استفاده از EndUpdate بدون BeginUpdate مجاز است؟



mbshareat
یک شنبه 07 مهر 1398, 07:09 صبح
سلام.
برنامه فایل رو میخونه و در لیست باکس نمایش میده و به سطر مورد نظر می پره.گاهی باید فایل جدید خونده بشه و گاهی همو.ن فایل هست ولی سطر دیگه باید منتقل بشم.
اگر چنین کدی بذارم مشکل ساز میشه؟امتحان کردم ظاهرا جواب میده(فقط میخوام برنامه پیچیده نشه!)
Procedure GotoFileLine(FileNo,LineNo:Word);
Begin
if FileNo<>CurrentFileNo then
Begin
ListBox1.Items.BeginUpdate;
LoadFileToListBox(FileNo);
End;
ListBox1.ItemIndex:=LineNo;
ListBox1.Items.EndUpdate;
End;

یوسف زالی
یک شنبه 07 مهر 1398, 22:19 عصر
سلام.


if FileNo<>CurrentFileNo then
Begin
ListBox1.Items.BeginUpdate;
LoadFileToListBox(FileNo);
ListBox1.Items.EndUpdate;
End;
ListBox1.ItemIndex:=LineNo;


سورس کد:


procedure TStrings.EndUpdate;
begin
Dec(FUpdateCount);
if FUpdateCount = 0 then SetUpdateState(False);
end;

همون طور که می بینی این کار ساید افکت هایی داره چون متغیر داخلی رو داره کم می کنه که BeginUpdate زیادش کرده بوده، و در این دو رویداد خودش رو نشون می ده:


procedure TStringList.Changed;
begin
if (FUpdateCount = 0) and Assigned(FOnChange) then
FOnChange(Self);
end;


procedure TStringList.Changing;
begin
if (FUpdateCount = 0) and Assigned(FOnChanging) then
FOnChanging(Self);
end;

دست زدن به این کار یعنی از دست دادن این دو متد!

mbshareat
یک شنبه 07 مهر 1398, 22:39 عصر
ممنون.به اندازه شما از این متد ها سر در نمیارم.ولی فکر کنم به این دو متد نیاز ندارم.
در ضمن کد اولتون مقصودم رو نمی رسونه.من برای این از beginUpdate استفاده می کنم که یهو اولین سطرهای لیست دیده نشه بعد بپره به سطر مورد نظر که باعث بشه کاربر کمی گیج بشه.
بلکه وقتی همه سطرها(منظورم همون Items هست!) تعریف شد و سطر مد نظر شد سطر جاری لیست نشون داده بشه.
منتهی وقتی لیست داره همون فایل رو نشون میده دیگه این کار لزوم نداره .فقط از سطر جاری میریم سطر مد نظر.

یوسف زالی
یک شنبه 07 مهر 1398, 22:50 عصر
ظاهرا ساید افکت دیگه ای نداره، البته ممکنه روی نسخه های بعدی به مشکل بخورید چون دلفی فرض می کنه که از مسیر درستش دارید استفاده می کنید.
بلایی که اول امسال با آپدیت دلفی سر من اومد و هنوزم گاهی تاوانش رو می دم.

mbshareat
دوشنبه 08 مهر 1398, 21:56 عصر
ممنون.برنامه ام در نسخه بالاتر اجرا نمیشه.