PDA

View Full Version : پاک کردن تمام فرم



drstrike
شنبه 21 اسفند 1389, 23:18 عصر
سلام...
یه فرم داریم که 100 تا ادیت باکس داخلش هست. چطوری یه پروسیجر بنویسیم که تمام این ادیت ها رو Clear کنه؟
آیا چنین کاری امکان پذیره؟

tdkhakpur
یک شنبه 22 اسفند 1389, 01:41 صبح
for i:=0 to 100-1 do
if (components[i] is TEdit) then
components[i].Destroy;

drstrike
یک شنبه 22 اسفند 1389, 09:40 صبح
نشدنیه قربان!
با این کار همه ادیت باکس ها از رو فرم حذف می شن که نمی خوام اینطوری بشه.
من میخوام محتویات ادیت باکس ها رو پاک کنم.

Felony
یک شنبه 22 اسفند 1389, 10:01 صبح
for i:=0 to 100-1 do
if (components[i] is TEdit) then
components[i].Destroy;

برای Clear کردن متد Clear شئ Edit باید فراخوانی شه ، برای دسترسی به متد Clear باید شئ بررسی بشه اگر از کلاس TEdit مشتق شده بود بعد به TEdit اون رو Typecast کنی نه اینکه متد Destroy رو فراخوانی کنید ، در ضمن برای آزاد سازی هم متد Free رو صدا میزنن تا nil نبودن شئ رو بررسی کنه !


نشدنیه قربان!
با این کار همه ادیت باکس ها از رو فرم حذف می شن که نمی خوام اینطوری بشه.
من میخوام محتویات ادیت باکس ها رو پاک کنم.
اگر از دلفی 2009 به بعد استفاده میکنید :
var
C: TComponent;
begin
for C in Self do
if C is TEdit then
TEdit(C).Clear;
end;

دلفی 2009 به قبل :
var
i: Byte;
begin
for I:= 0 to Self.ComponentCount - 1 do
if Self.Components[i] is TEdit then
TEdit(Components[i]).Clear;
end;

BORHAN TEC
یک شنبه 22 اسفند 1389, 10:06 صبح
برای این کار می توانید از کد زیر استفاده کنید. البته برای انجام این کار روشهای دیگری هم وجود دارد.
procedure TForm1.Button1Click(Sender: TObject);
var
I: integer;
edt: TEdit;
begin
for I := 0 to Form1.ControlCount - 1 do
if self.Controls[I].ClassName = 'TEdit' then
begin
edt := (self.Controls[I] as TEdit);
edt.Clear;
end;
end;

drstrike
سه شنبه 20 اردیبهشت 1390, 00:23 صبح
برای این کار می توانید از کد زیر استفاده کنید. البته برای انجام این کار روشهای دیگری هم وجود دارد.
procedure TForm1.Button1Click(Sender: TObject);
var
I: integer;
edt: TEdit;
begin
for I := 0 to Form1.ControlCount - 1 do
if self.Controls[I].ClassName = 'TEdit' then
begin
edt := (self.Controls[I] as TEdit);
edt.Clear;
end;
end;
من کد شما رو توی یک unit دیگه گذاشتم تا توی همه فرمها ازش استفاده کنم، اما به مشکل برخوردم.
کد یونیت func:

unit func;

interface

uses
Windows, Forms, StdCtrls;


implementation

procedure clear(const frm:TForm);
var
I: integer;
edt: TEdit;
begin
for I := 0 to frm.ControlCount - 1 do
if frm.Controls[I].ClassName = 'TEdit' then
begin
edt := (frm.Controls[I] as TEdit);
edt.Clear;
end;
end;

end.
ممنون میشم راهنمایی کند

Mask
سه شنبه 20 اردیبهشت 1390, 12:44 عصر
از یونیت زیر استفاده کنید.

SAASTN
سه شنبه 20 اردیبهشت 1390, 13:06 عصر
به مشکل برخوردم.
بازم تست هوش!!! خوب بگید به چه مشکلی بر خوردید.
در هر صورت یونیتی که قرار دادید مشکلی از نظر اجرا نداره، تنها نقصی که داره اینه که تابع clear از یونیت های دیگه قابل فراخوانی نیست. اگر مشکلتون اینه باید خط:
procedure clear(const frm:TForm);

رو در بخش interface هم بیارید:
unit func;

interface

uses
Windows, Forms, StdCtrls;

procedure clear(const frm:TForm);

implementation

procedure clear(const frm:TForm);
var
I: integer;
edt: TEdit;
begin
for I := 0 to frm.ControlCount - 1 do
if frm.Controls[I].ClassName = 'TEdit' then
begin
edt := (frm.Controls[I] as TEdit);
edt.Clear;
end;
end;

end.
و البته یک نکته در باب تفاوت کدهایی که آقای تاجیک و آقای عشایری قرار دادند، برای اینکه با توجه به کاربردتون از اونها استفاده کنید:
در کد آقای تاجیک برای تشخیص Edit بودن کنترل ها از اپراتور is استفاده شده که نوع کلاس رو تشخیص میده، بنا بر این متد Clear رو, برای تمام کنترلهایی که از نوع TEdit یا فرزندان TEdit هستند فرا خونی می کنه. مثلا اگر روی فرمتون یه کنترل از نوع TMyEdit که خودتون از TEdit مشتق کردید هم وجود داشته باشه، Clear میشه. یا اگر روی فرمتون چند کنترل مختلف، که بعضی از اونها TEdit و بعضی دیگه TMaskEdit هستند، وجود داشته باشه و بخواید همه رو خالی کنید کافیه توی کد آقای تاجیک TEdit رو به TCustomEdit تغییر بدید.
اما در کد آقای عشایری از مقایسه رشته ای نام کلاس کنترل ها استفاده شده که باعث میشه کد فقط روی TEdit ها اجرا بشه نه فرزندان اون. حالا باز هم مثل بالا اگر رو فرمتون یه TMyEditی دارید و نمی خواید به همراه بقیه Editها خالی بشه، می تونید از روش آقای عشایری استفاده کنید.