如何控制窗体中的控件为readonly或disable(200分)

  • 主题发起人 主题发起人 wenjunp
  • 开始时间 开始时间
W

wenjunp

Unregistered / Unconfirmed
GUEST, unregistred user!
在子窗体中,最顶上是一个工具条,有‘新增’‘修改’‘保存’等按钮,如果点击保存,
就必须将相关的DBEDIT或其它相关控制设置为只读,而将treeview设置为enable,
如果是点击新增,则将相关的DBEDIT或其它相关控制设置为可修改,而将treeview设置为enable,

请问有何典型的方法来实现,最好是写一个公共函数就能实现,因为程序有很多子窗体不可能每个
都写一堆代码来处理此问题。
 
你麻烦不麻烦
保存完了为什么要把那个置为只读?
 
可以的.
把你的控件分类,同时改变这些属性的(readonly)为一类,tag值设置为相同值.用类似下面的代码就可以实现你要求的了
for i:=0 to Myform.ComponentCount-1 do
begin
; if (MyForm.Components.tag=1) and (MyForm.Components is TEDIT) then
; ; ;(TEdit)(MyForm.Components).readonly=true;
; if (MyForm.Components.tag=9) and (MyForm.Components is TTreeView) then
; ; (TTreeView)(MyForm.Components.Enabled)=true;
end;
 
如果你是使用数据库,你干嘛不用TActionList呢?里面去选Standard Action的DataSet系列.
你有什么额外的操作可以加在Execute事件中.
 
以下是我们上次开发项目时用到的一些代码,基本思想与sonie的大致相同;
很想知道各位在实际中是如何处理此问题的。
Thank you All

procedure SetReadOnly(fm: TForm);
var
; i: integer;
begin
; with fm do
; begin
; ; try
; ; ; LockWindowUpdate(fm.Handle);
; ; ; for i := 0 to ComponentCount - 1 do
; ; ; begin
; ; ; ; if (Components is TTreeView) then
; ; ; ; ; TTreeView(Components).enabled:=True;
; ; ; ; if IsPublishedProp(Components, 'DataSource') and
; ; ; ; ; IsPublishedProp(Components, 'ReadOnly') and (Components.Tag <> 1) then
//注:出于其它原因,对于tag不是1的控件我们不去控制
; ; ; ; begin
; ; ; ; ; SetEnumProp(Components, 'ReadOnly', 'True');
; ; ; ; end;
; ; ; end;
; ; finally
; ; ; LockWindowUpdate(0);
; ; end;
; end;
end;
 
若你的子表单都有这些控件,那么你可以将各表单要共用的控件放在一个表单中,将此表单作
为父表单,然后其它表单继承父表单,作为子表单,而你的上述那些控制方法都写在父表单中,
子表单就可以不用管了.这个方法行吗?
 
zhangkan说得有道理,我们也是这么处理的,当然对于每个子窗体可能会有些特殊情况需处理,
这时需override父窗体中的相关处理函数
 
多人接受答案了。
 
后退
顶部