panel上有许多edit,我想所有的edit都不可改写,但我又不想一个一个edit.readonly=true ,请问有什么好的办法?(100分)

  • 主题发起人 主题发起人 chengjp
  • 开始时间 开始时间
方法1:用控件数组来实现 就是说把你的EDIT用控件数组来实现 这样就可以用循环了
方法2:可能可以这样,你试试 panel.enable := False ;
 
for i := 0 to Panel.ControlCount - 1 do
if Panel.Controls is TEdit then
(Panel.Controls as TEdit).ReadOnly := True;
 
var
I: Integer;
begin
for I := 0 to Panel1.ComponentCount -1 do
begin
if (Panel1.Components) is TEdit then
TEdit(Panel1.Components).ReadOnly := True;
end;
end;
 
to 方法1 我的控件名字都是具有含义的,用控件数组不太好。
to 方法2 panel.enable := False 如果控件中的内容较多那么后面的信息就不能显示了

我的初步考虑是用变量来控制,如果变量=false ,则edit的值还原不许它修改
 
我同意SeptSky,把这个方法给忘了 呵呵
 
还有一个方法,把你的edit命名为edit1..edit5

for i := 1 to 5 do
TEdit(findComponent('edit' + intToStr(i))).readOnly := true;
 
呵呵,我定义了一个方法,大家给我挑挑毛病:

定义一个全局变量 V_readonly=true
在edit控件的Edit1KeyPress
procedure TForm1.Edit1KeyPress(Sender: TObject
var Key: Char);
begin
if key<>#13 then
if V_readonly=true then
key:=#0;
end;

edit控件比较多,TEdit(findComponent('edit' + intToStr(i))).readOnly 耗费时间


 
plzw的方法比较正统.另外还可以结合Control.Tag来区分需要操作的对象.
至于耗时.根本不要考虑的.这需要多少时钟周期?
当然全局变量的方法不是一无可取,比如是否只读是动态变化的.这是可以考虑在调用获得是否只读用一个方法包装起来更好一些.
不过这种方法有一个问题,不能防止粘帖/剪切.而且对于控制键缺乏处理(退格)
 
后退
顶部