读书人

小弟我想要一个容器里面的所有TDBEdit

发布时间: 2012-09-01 09:33:02 作者: rapoo

我想要一个容器里面的所有TDBEdit只读,有什么捷径吗?
一个多 TTabSheet 的界面,
符合某种条件下,
就是希望某一个选中的 TTabSheet 界面里面的容器 Tpanel 里所有的 TDBEdit 或者 TDBComboBox 之类的,只读。有什么快捷的方法吗?很多,如果一个一个写,那是需要很多时间啊。
比如,下面的这一段函数好像不起作用,是为什么呢?

Delphi(Pascal) code
procedure Tform_Pre.SetState(AIndex: Integer; ViewState: Boolean);var  i: Integer;  tsCur: TTabSheet;begin  tsCur := pcSta.Pages[AIndex];  if ViewState then  begin    for i := 0 to tsCur.ControlCount - 1 do      if tsCur.Controls[i] is TDBEdit then      begin        TDBEdit(tsCur.Controls[i]).ReadOnly := True;        TDBEdit(tsCur.Controls[i]).Color := ViewColor;      end      else if tsCur.Controls[i] is TDBComboBox then      begin        TDBComboBox(tsCur.Controls[i]).ReadOnly := True;        TDBComboBox(tsCur.Controls[i]).Color := ViewColor;      end      else if tsCur.Controls[i] is TDBDateTimeEditEh then      begin        TDBDateTimeEditEh(tsCur.Controls[i]).ReadOnly := True;        TDBDateTimeEditEh(tsCur.Controls[i]).Color := ViewColor;      end      else if tsCur.Controls[i] is TDBMemo then      begin        TDBMemo(tsCur.Controls[i]).ReadOnly := True;        TDBMemo(tsCur.Controls[i]).Color := ViewColor;      end;  end  else    for i := 0 to tsCur.ControlCount - 1 do      if tsCur.Controls[i] is TDBEdit then      begin        TDBEdit(tsCur.Controls[i]).ReadOnly := False;        TDBEdit(tsCur.Controls[i]).Color := clWindow;      end      else if tsCur.Controls[i] is TDBComboBox then      begin        TDBComboBox(tsCur.Controls[i]).ReadOnly := False;        TDBComboBox(tsCur.Controls[i]).Color := clWindow;      end      else if tsCur.Controls[i] is TDBDateTimeEditEh then      begin        TDBDateTimeEditEh(tsCur.Controls[i]).ReadOnly := False;        TDBDateTimeEditEh(tsCur.Controls[i]).Color := clWindow;      end      else if tsCur.Controls[i] is TDBMemo then      begin        TDBMemo(tsCur.Controls[i]).ReadOnly := False;        TDBMemo(tsCur.Controls[i]).Color := clWindow;      end;  end;end;


[解决办法]
设置相连的的数据集只读
[解决办法]
我的做法,设置容器的Enabled
[解决办法]
一楼真强...简单明了
[解决办法]
楼主的代码不是已经实现了吗

或者在 panel里判断:

for(i:=0;i<panel.Controls.Count;i++)
begin
if( panel.Controls[i] is TDBEdit) then
panel.Controls[i].Enabled := false;
end;
[解决办法]
在一个unit里写:
Procedure GroupBox_ReadOnly_True(GroupBoxName:TGroupBox);//将GroupBox内项目设置成只读
Procedure GroupBox_ReadOnly_False(GroupBoxName:TGroupBox);//将GroupBox内项目设置成可写
Procedure GroupBox_Clear(GroupBoxName:TGroupBox);//将GroupBox内项目清空
Procedure GroupBox_Color(GroupBoxName:TGroupBox;StrColor:TColor); //将GroupBox内项目变颜色


Procedure GroupBox_ReadOnly_True(GroupBoxName:TGroupBox);
//引用 Controls, StdCtrls
var
i:integer;
begin
with GroupBoxName do
for i:=0 to controlcount-1 do
begin
if controls[i] is TEdit then TEdit(controls[i]).ReadOnly := True;
if controls[i] is TEdit then TEdit(controls[i]).Color := clWindow;
if controls[i] is TComboBox then TComboBox(controls[i]).Enabled:=False;
if controls[i] is TComboBox then TComboBox(controls[i]).Color:=clWindow;
if controls[i] is TCheckBox then TCheckBox(controls[i]).Enabled:=False;
if controls[i] is TDateTimePicker then TDateTimePicker(controls[i]).Enabled:=False;
if controls[i] is TMemo then TMemo(controls[i]).ReadOnly := True;
if controls[i] is TMemo then TMemo(controls[i]).Color := clWindow;


end;
end;

Procedure GroupBox_ReadOnly_False(GroupBoxName:TGroupBox);
//引用Windows, System
var
i:integer;
begin
with GroupBoxName do
for i:=0 to controlcount-1 do
begin
if controls[i] is TEdit then TEdit(controls[i]).ReadOnly := False;
if controls[i] is TEdit then TEdit(controls[i]).Color := clwindow;
if controls[i] is TComboBox then TComboBox(controls[i]).Enabled:=True;
if controls[i] is TComboBox then TComboBox(controls[i]).Color:=clwindow;
if controls[i] is TCheckBox then TCheckBox(controls[i]).Enabled:=True;
if controls[i] is TDateTimePicker then TDateTimePicker(controls[i]).Enabled:=True;
if controls[i] is TMemo then TMemo(controls[i]).ReadOnly := False;
if controls[i] is TMemo then TMemo(controls[i]).Color := clwindow;
end;
end;

Procedure GroupBox_Clear(GroupBoxName:TGroupBox);//将GroupBox内项目清空
//引用Windows, System
var
i:integer;
begin
with GroupBoxName do
for i:=0 to controlcount-1 do
begin
if controls[i] is TEdit then TEdit(controls[i]).Clear;
if controls[i] is TComboBox then TComboBox(controls[i]).Text:='';
end;
end;

Procedure GroupBox_Color(GroupBoxName:TGroupBox;StrColor:TColor);
//引用Windows, System
var
i:integer;
begin
with GroupBoxName do
for i:=0 to controlcount-1 do
begin
if controls[i] is TEdit then TEdit(controls[i]).Font.Color := StrColor;
if controls[i] is TComboBox then TComboBox(controls[i]).Font.Color:=StrColor;
if controls[i] is TDateTimePicker then TDateTimePicker(controls[i]).Font.Color:=StrColor;
end;
end;

然后在你的form里调用就可以了

[解决办法]

探讨
我的做法,设置容器的Enabled

[解决办法]
探讨
楼主的代码不是已经实现了吗

或者在 panel里判断:

for(i:=0;i<panel.Controls.Count;i++)
begin
if( panel.Controls[i] is TDBEdit) then
panel.Controls[i].Enabled := false;
end;

[解决办法]
探讨
引用:
我的做法,设置容器的Enabled
+1,我也是这么干的

[解决办法]
我曾经是这么干的,效果也不错
Procedure TFrm_Pub.SetComponentReadOnly(ParentComponent:TWincontrol;bReadOnly:boolean);
var I:integer;
begin
for I:=0 to ParentComponent.ControlCount-1 do
begin

if ParentComponent.Controls[i] is TEdit then
begin
TEdit(ParentComponent.Controls[i]).ReadOnly:=bReadOnly;
if bReadOnly then
TEdit(ParentComponent.Controls[i]).Color:=clBtnFace else
TEdit(ParentComponent.Controls[i]).Color:=clWindow;
end;

if ParentComponent.Controls[i] is TDBEdit then
begin
TDBEdit(ParentComponent.Controls[i]).ReadOnly:=bReadOnly;
if bReadOnly then
TDBEdit(ParentComponent.Controls[i]).Color:=clBtnFace else
TDBEdit(ParentComponent.Controls[i]).Color:=clWindow;
end;

if ParentComponent.Controls[i] is TRZDBCombobox then
begin
TRZDBCombobox(ParentComponent.Controls[i]).ReadOnly:=bReadOnly;
if bReadOnly then
TRZDBCombobox(ParentComponent.Controls[i]).Color:=clBtnFace else
TRZDBCombobox(ParentComponent.Controls[i]).Color:=clWindow;
end;

if ParentComponent.Controls[i] is TDBCombobox then
begin
TDBCombobox(ParentComponent.Controls[i]).ReadOnly:=bReadOnly;
if bReadOnly then
TDBCombobox(ParentComponent.Controls[i]).Color:=clBtnFace else


TDBCombobox(ParentComponent.Controls[i]).Color:=clWindow;
end;

if ParentComponent.Controls[i] is TRZDBEdit then
begin
TRZDBEdit(ParentComponent.Controls[i]).ReadOnly:=bReadOnly;
if bReadOnly then
TRZDBEdit(ParentComponent.Controls[i]).Color:=clBtnFace else
TRZDBEdit(ParentComponent.Controls[i]).Color:=clWindow;
end;

if ParentComponent.Controls[i] is TDBDateTimeEditEh then
begin
TDBDateTimeEditEh(ParentComponent.Controls[i]).ReadOnly:=bReadOnly;
if bReadOnly then
TDBDateTimeEditEh(ParentComponent.Controls[i]).Color:=clBtnFace else
TDBDateTimeEditEh(ParentComponent.Controls[i]).Color:=clWindow;
end;
end;
end;

读书人网 >.NET

热点推荐