精华区 [关闭][返回]

当前位置:网易精华区>>讨论区精华>>编程开发>>● VFP>>〖界面设计〗>>在form中增加编辑按钮

主题:在form中增加编辑按钮
发信人: foxzz()
整理人: hunter__fox(2002-03-16 22:47:22), 站内信件
请参考: 
1、设置控件的enabled=.f. 
2、在基类增加方法:setallprop() 
   进一步,增加控件访问管理属性access,以下程序供参考: 
LPARAMETER oContainer,cContainerType 
* Checks for General fields 
LOCAL i,oControlParent,j 
PUBL LCURROBJECT 
LCURROBJECT='' 
IF PARA()=0 
m.oControlParent = THISFORM 
m.cContainerType='1' 
ELSE 
m.oControlParent = m.oContainer 
ENDIF 
IF EMPTY(m.cContainerType) 
   m.cContainerType='1' 
ENDIF 
IF ATC("PageFrame1",m.oControlParent.name)  # 0 
   FOR I=1 TO M.oControlParent.PageCount 
       THIS.SetAllProp(m.oControlParent.pages[m.i]) 
   ENDFOR 
   return .t. 
ENDIF 
LOCAL LLCUROBJECTRIGHT 
LLCUROBJECTRIGHT=.T. 
IF m.cContainerType='2'              && Commandgroup 
   FOR i = 1 TO m.oControlParent.ButtonCount 
       DO CASE 
       CASE ATC(m.oControlParent.Buttons[m.i].BaseClass,"Commandbutton 
,CheckBox,TextBox,OleBoundControl,ComBobox,EditBox,SPINNER,Listbox") # 
 0 
            LCURROBJECT=m.oControlParent.Buttons[m.i].NAME 
            IF TYPE('m.oControlParent.BUTTONS[m.i].RIGHTS')<>'U' 
               LLCUROBJECTRIGHT=m.oControlParent.BUTTONS[m.i].RIGHTS 
            ENDIF 
            IF TYPE('m.oControlParent.Buttons[m.i].access')='U' 
               m.oControlParent.Buttons[m.i].Enabled = _SCREEN.ACTIVEF 
ORM.lAllowEdits ; 
                           AND LLCUROBJECTRIGHT 
            ELSE 
               IF m.oControlParent.Buttons[m.i].access 
                  m.oControlParent.Buttons[m.i].Enabled = _SCREEN.ACTI 
VEFORM.lAllowEdits ; 
                           AND LLCUROBJECTRIGHT 
               ENDIF 
            ENDIF 
       ENDCASE 
   ENDFOR 
   RETURN .T. 
ENDIF 
IF .f. and m.cContainerType='3'     && Grid 
   FOR i = 1 TO m.oControlParent.ColumnCount 
       DO CASE 
       CASE ATC(m.oControlParent.Columns[m.i].BaseClass,"Commandbutton 
,CheckBox,TextBox,OleBoundControl,ComBobox,EditBox,SPINNER,Listbox") # 
 0 
            LCURROBJECT=m.oControlParent.Columns[m.i].NAME 
            IF TYPE('m.oControlParent.Columns[m.i].RIGHTS')<>'U' 
               LLCUROBJECTRIGHT=m.oControlParent.Columns[m.i].RIGHTS 
            ENDIF 
            IF TYPE('m.oControlParent.Columns[m.i].access')='U' 
               m.oControlParent.Columns[m.i].Enabled = _SCREEN.ACTIVEF 
ORM.lAllowEdits ; 
                           AND LLCUROBJECTRIGHT 
            ELSE 
               IF m.oControlParent.Columns[m.i].access 
                  m.oControlParent.Columns[m.i].Enabled = _SCREEN.ACTI 
VEFORM.lAllowEdits ; 
                           AND LLCUROBJECTRIGHT 
               ENDIF 
            ENDIF 
       ENDCASE 
       THIS.SetAllProp(m.oControlParent.Columns[m.i]) 
   ENDFOR 
   RETURN .T. 
ENDIF 
IF m.cContainerType='1' 
   FOR i = 1 TO m.oControlParent.ControlCount 
       IF TYPE('m.oControlParent.Controls[m.i].RIGHTS')<>'U' 
          LLCUROBJECTRIGHT=m.oControlParent.Controls[m.i].RIGHTS 
       ENDIF 
DO CASE 
CASE ATC("Page",m.oControlParent.Controls[m.i].BaseClass) # 0 
THIS.SetAllProp(m.oControlParent.Controls[m.i]) 
CASE ATC("Container",m.oControlParent.Controls[m.i].BaseClass) # 0 
THIS.SetAllProp(m.oControlParent.Controls[m.i]) 
CASE ATC("Commandgroup",m.oControlParent.Controls[m.i].BaseClass) # 0 
THIS.SetAllProp(m.oControlParent.Controls[m.i],'2') 
CASE ATC(m.oControlParent.Controls[m.i].BaseClass,"Commandbutton,Chec 
kBox,TextBox,OleBoundControl,ComBobox,EditBox,SPINNER,Listbox") # 0 
         LCURROBJECT=m.oControlParent.Controls[m.i].NAME 

         IF TYPE('m.oControlParent.Controls[m.i].access')='U' 
            m.oControlParent.Controls[m.i].Enabled = _SCREEN.ACTIVEFOR 
M.lAllowEdits ; 
               AND LLCUROBJECTRIGHT 
         ELSE 
            IF m.oControlParent.Controls[m.i].access 
               m.oControlParent.Controls[m.i].Enabled = _SCREEN.ACTIVE 
FORM.lAllowEdits ; 
                           AND LLCUROBJECTRIGHT 
            ENDIF 
         ENDIF 
         IF 'NOACCESS' $ m.oControlParent.Controls[m.i].TAG 
             m.oControlParent.Controls[m.i].Enabled =.F. 
         ENDIF 

         && 刷新代码意义 
         IF m.oControlParent.Controls[m.i].BaseClass='TextBox' 
              IF TYPE('m.oControlParent.Controls[m.i].LCODENAME')<>'U' 
  AND m.oControlParent.Controls[m.i].LCODENAME 
                  m.oControlParent.Controls[m.i].VALUE='' 
              ENDIF 
         ENDIF 
CASE ATC(m.oControlParent.Controls[m.i].BaseClass,"EditBox") # 0 
         IF TYPE('m.oControlParent.Controls[m.i].access')='U' 
     m.oControlParent.Controls[m.i].ReadOnly = !_SCREEN.ACTIVEFORM.lA 
llowEdits ; 
               AND LLCUROBJECTRIGHT 
      ELSE 
            IF m.oControlParent.Controls[m.i].access 
               m.oControlParent.Controls[m.i].ReadOnly = !_SCREEN.ACTI 
VEFORM.lAllowEdits ; 
                    AND LLCUROBJECTRIGHT 
            ENDIF 
      ENDIF 
IF .F. AND !THIS.HasMemo 
WITH m.oControlParent.Controls[m.i] 
THIS.EditForeColor = .ForeColor 
THIS.EditDisForeColor =  .DisabledForeColor 
THIS.EditBackColor = .BackColor 
THIS.EditDisBackColor =  .DisabledBackColor 
THIS.HasMemo = .T. 
ENDWITH 
ENDIF 
IF .F. 
   m.oControlParent.Controls[m.i].ForeColor = IIF(_SCREEN.ACTIVEFORM 
.lAllowEdits,_SCREEN.ACTIVEFORM.EditForeColor,_SCREEN.ACTIVEFORM.EditD 
isForeColor) 
           m.oControlParent.Controls[m.i].BackColor = IIF(_SCREEN.ACTI 
VEFORM.lAllowEdits,_SCREEN.ACTIVEFORM.EditBackColor,_SCREEN.ACTIVEFORM 
.EditDisBackColor) 
        ENDIF 
         IF 'NOACCESS' $ m.oControlParent.Controls[m.i].TAG 
             m.oControlParent.Controls[m.i].Enabled =.F. 
         ENDIF 
CASE ATC(m.oControlParent.Controls[m.i].BaseClass,"Grid") # 0 
         IF TYPE('m.oControlParent.Controls[m.i].access')='U' 
            m.oControlParent.Controls[m.i].Enabled = _SCREEN.ACTIVEFOR 
M.lAllowEdits 
            m.oControlParent.Controls[m.i].DeleteMark =_SCREEN.ACTIVEF 
ORM.lAllowEdits 
          m.oControlParent.Controls[m.i].READONLY = NOT _SCREEN.ACTIVE 
FORM.lAllowEdits 
IF .F. 
              IF _SCREEN.ACTIVEFORM.lAllowEdits 
                 m.oControlParent.Controls[m.i].Enabled = .T. 
                 m.oControlParent.Controls[m.i].DeleteMark = .T. 
                 m.oControlParent.Controls[m.i].READONLY = .F. 
              ELSE 
                 m.oControlParent.Controls[m.i].Enabled = .T. 
                 m.oControlParent.Controls[m.i].DeleteMark = .F. 
                 m.oControlParent.Controls[m.i].READONLY = .T. 
              ENDIF 
ENDIF 
     ELSE 
            IF m.oControlParent.Controls[m.i].access 
               m.oControlParent.Controls[m.i].Enabled = _SCREEN.ACTIVE 
FORM.lAllowEdits 
               m.oControlParent.Controls[m.i].DeleteMark =_SCREEN.ACTI 
VEFORM.lAllowEdits 
               m.oControlParent.Controls[m.i].READONLY = NOT _SCREEN.A 
CTIVEFORM.lAllowEdits 
IF .F. 
              IF _SCREEN.ACTIVEFORM.lAllowEdits 
                 m.oControlParent.Controls[m.i].Enabled = .T. 
                 m.oControlParent.Controls[m.i].DeleteMark = .T. 
                 m.oControlParent.Controls[m.i].READONLY = .F. 
              ELSE 
                 m.oControlParent.Controls[m.i].Enabled = .T. 
                 m.oControlParent.Controls[m.i].DeleteMark = .F. 
                 m.oControlParent.Controls[m.i].READONLY = .T. 
              ENDIF 
ENDIF 
            ELSE 
               && m.oControlParent.Controls[m.i].ENABLED = !_SCREEN.AC 
TIVEFORM.lAllowEdits 
               && m.oControlParent.Controls[m.i].DeleteMark =!_SCREEN. 
ACTIVEFORM.lAllowEdits 
            ENDIF 
            && THIS.SetAllProp(m.oControlParent.Controls[m.i],'3') 

&&     m.oControlParent.Controls[m.i].ENABLED = _SCREEN.ACTIVEFORM.lA 
llowEdits 
&&      m.oControlParent.Controls[m.i].DeleteMark =_SCREEN.ACTIVEFORM. 
lAllowEdits 
 ENDIF 
ENDCASE 
  ENDFOR 
ENDIF 
&& 
3、增加modify方法: 
LPARAMETER oContainer,cContainerType 
* Checks for General fields 
LOCAL i,oControlParent,j 
PUBL LCURROBJECT 
LCURROBJECT='' 
IF PARA()=0 
m.oControlParent = THISFORM 
m.cContainerType='1' 
ELSE 
m.oControlParent = m.oContainer 
ENDIF 
IF EMPTY(m.cContainerType) 
   m.cContainerType='1' 
ENDIF 
IF ATC("PageFrame1",m.oControlParent.name)  # 0 
   FOR I=1 TO M.oControlParent.PageCount 
       THIS.SetAllProp(m.oControlParent.pages[m.i]) 
   ENDFOR 
   return .t. 
ENDIF 

[关闭][返回]