如果我在一個Form上動態創建50個控件,50個控件裡有CheckBox,Combobox,Edit等。
我用下面的代碼
for i:=0 to sb1.ControlCount-1 do
begin
if (sb1.Controls[i] is TCustomEdit)then
(sb1.Controls[i] as TEdit).Free;
end;
但實際上還是不能把所有的TEdit找到來Free掉
不知道是BUG還是其他什麼原因!
我用下面的代碼
for i:=0 to sb1.ControlCount-1 do
begin
if (sb1.Controls[i] is TCustomEdit)then
(sb1.Controls[i] as TEdit).Free;
end;
但實際上還是不能把所有的TEdit找到來Free掉
不知道是BUG還是其他什麼原因!
解决方案 »
- delphi 如何调用catia ?SOS
- 真诚求解:根据数据库的USERS表(用户及权限表)的内容来动态的决定MAINmenu的显示否
- 如何用TFileStream读取文件呢?
- 请问各位,如何在不知道共有多少个对象的情况下创建,调用此对象
- 按钮的文字是什么类型的, 文件的路径要设置为什么类型的,字符型行吗
- 我不想显示树中的滚动该怎么实现
- 那位大哥能帮我把C#转成delphi语法,小弟万分跪谢!
- ===== 如何实现用程序气象服务? =====
- 关于怎么做BDE安装程序的问题!请做过的兄弟帮帮忙!
- 为什么access在quickrep中老是出错?
- Process32Next 问题
- CheckListBox一行过长怎办?
=》
for i:=0 to sb1.ComponentCount-1 do
begin
if (self.Components[i] is TEdit) then
TEdit(Components[i]).Free
end;
procedure TForm1.Button2Click(Sender: TObject);
var
i:integer;
begin
for i:=self.ControlCount-1 downto 0 do
begin
if (self.Controls[i] is TEdit) then
TEdit(Controls[i]).Free
end;
end;
這種方法,我第一次點新建按鈕時是先建6個Edit,正常,
第二次點新建 按鈕是是建12個Edit,正常。
第三次又隻建6個Edit,正常,但是第二次建的12個Edit有6個被這次建的6個覆蓋。
還有6個任然在Form上,沒有消失!所以我現在的需求就是把之前建的全刪除,再重新建6個Edit在Form上!
第一次點新建,6個Edit正常顯示。
第二次點新建,就報錯了List Out of Bounds(6)So還得麻煩各位大哥們繼續指教!
i:Integer;
MyEdit:TEdit;
begin
for i:=self.ComponentCount-1 downto 0 do
begin
if (self.Components[i] is TEdit) then
TEdit(Components[i]).Free
end;
for i:=0 to 5 do
begin
MyEdit:= TEdit.Create(Owner);
MyEdit.Top:=i*50;
MyEdit.Parent:=self;
MyEdit.Width:=100;
MyEdit.Height:=30;
MyEdit.Visible:=True;
end;
end;
procedure Tfmfaliao.RefreshForm;
var
i:Integer;
begin
// for i:=sb1.ControlCount-1 Downto 0 do
// begin
// if (sb1.Controls[i] is TEdit) then
// TEdit(Controls[i]).Free;
// end; for i:=sb1.ControlCount-1 downto 0 do
begin
if (sb1.Controls[i] is TEdit) then
TEdit(Controls[i]).Free
end;
end;function Tfmfaliao.CreateNewTurnInRecord(const ATop: Integer): TBaseTurnInData;
begin
with Result do
begin
Result := TBaseTurnInData.Create(Self);
CheckBox := CreateNewCheckBox(Result, sb1, ATop-19, 8, 17);
PartNOEdit := CreateNewEdit(Result,sb1,ATop-19,28,121);
QtyEdit := CreateNewEdit(Result,sb1,ATop-19,159,57);
Qty2Edit := CreateNewEdit(Result,sb1,ATop-19,226,57);
Qty3Edit := CreateNewEdit(Result,sb1,ATop-19,294,57);
MOEdit := CreateNewEdit(Result,sb1,ATop-19,361,121);
Qty4Edit := CreateNewEdit(Result,sb1,ATop-19,496,57);
CheckBox.OnClick := chkTurnInClick;
Qty4Edit.OnKeyPress := IntegerEditKeyPress;
Qty4Edit.OnChange := chkQty4OnChange;
end;
end;
procedure Tfmfaliao.tlRefreshClick(Sender: TObject);
var
I:Integer;
ATurnIn:TBaseTurnInData;
begin
RefreshForm; //這就是要刷新Form的方法了。
I := 1;
TWip_Runcard.GetWipTurnByWO3(quGet,quGet1,lsPNQuery.Items); while not quGet.Eof do
begin
ATurnIn := CreateNewTurnInRecord(i*27) ;//這裡是新建控件
with ATurnIn,quGet do //quGet查到多少條記錄,就要創建多少行Edit,每行是5個Edit.有時候查詢出來1條記錄,但有時候查詢出來2條,但有時候可能一條記錄都沒有,所以,當沒有記錄的時候,之前顯示在Form上的Edit要全部Free掉,
begin
PartNOEdit.Text := FieldByName('Part_NO').AsString;
QtyEdit.Text := FieldByName('TOTAL').AsString;
Qty2Edit.Text := FieldByName('Yifa').AsString;
Qty3Edit.Text := FieldByName('Kefa').AsString;
CheckBox.Enabled := StrToInt(Qty3Edit.Text) <> 0;
TurnInList.Add(ATurnIn);
Inc(i);
quGet.Next;
end;
end;
end;在刷 新Form後。也就是把之前創建的Edit Free掉後,
我會再新建Edit,然後向裡面寫一些資料。
你把我这个单元测试一下看看你那里不对unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
s:Integer;
procedure CreateNewEdit(count:Integer);
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
var
i:Integer;
begin
for i:=self.ControlCount-1 downto 0 do
begin
if (self.Controls[i] is TEdit) then
TEdit(Controls[i]).Free
end;
if s>0 then
CreateNewEdit(s);
end;procedure TForm1.CreateNewEdit(count: Integer);
var
MyEdit:TEdit;
i:Integer;
begin
for i:=0 to count-1 do
begin
MyEdit:= TEdit.Create(Owner);
MyEdit.Top:=i*50;
MyEdit.Parent:=self;
MyEdit.Width:=100;
MyEdit.Height:=30;
MyEdit.Visible:=True;
end;
inc(s,-1);
end;procedure TForm1.FormCreate(Sender: TObject);
begin
s:=10;
end;end.
for i:=sb1.ControlCount-1 downto 0 do
begin
if (sb1.Controls[i] is TEdit) then
TEdit(sb1.Controls[i]).Free; //注意这里你遍历的是sb1
end;
按您的方法。
點一下Button之後Form上出現10個Edit.
再繼續點Button,Form上的Edit是點一下消失一個,點10下後,10個Edit全消失。
就再也不出來了!
呵呵真不好意思。正如您所說的。
TEdit(sb1.Controls[i]).Free; //這裡少掉了sb1現在功能OK
感覺 感謝失踪的月亮賴心的幫忙!!!