之前在网上找了一堆,但那些确实没法用,后来考虑了一下,发现主要是网上提供的假设form中只有一层控件,没有考虑到布局稍微复杂的form情形,此处采用递归的形式实现对form中所有控件(grid及button必须排除,否则会报错,如果发现还有其它控件也会报错,请反馈给我,好完善此代码)

代码很简单,setFormReadOnly需要两个参数,一个为form,一个为bool型变量,标明是需要给form整体加上readOnly属性或是去除此属性.

由于setReadOnly只是将控件置为只读或非只读,不能改变控件颜色,达不到让用户一眼看出是否为只读的效果,所以在此用setFieldStyle使得设置为只读的控件置灰.

setFormReadOnly为程序入口,里面有一个内嵌函数SetitemsReadOnly,此函数为递归函数,只要发现其本身属性items不为空,则会递归调用自身,通过这样的方式实现所有子控件都设置为readonly.

另外,程序中有一个stateId属性判断,此判断用于在将readOnly的控件恢复正常时作一个过滤,凡是其stateId为readOnly的,一律略过,保持其readOnly属性,不进行恢复

setFormReadOnly = function(form, readOnly) {

    setItemsReadOnly = function(items, readOnly) {

        items.each(function(item) {

                    var childitems = item.items;

                    if (!Ext.isEmpty(childitems, false)) {

                        setItemsReadOnly(childitems, readOnly);

                    } else {

                        if (item.xtype != "button" && (item.xtype != "gridview")) {

                            if(!Ext.isEmpty(item.stateId) && (item.stateId == "readOnly")){

                                return ;

                            }

                            item.setReadOnly(readOnly);

                            if (readOnly) {

                                item.setFieldStyle("background:#E6E6E6");

                            } else {

                                item.setFieldStyle("background:#FFFFFF");

                            }

                        }

                    }

                });

    }

    setItemsReadOnly(form.items, readOnly);

}

Extjs4 关于设置form中所有子控件为readOnly属性的解决方案的更多相关文章

  1. TListView控件的ReadOnly属性的一个Bug

    不知道是不是ListView的 ReadOnly属性的一个bug 1.Form上一个ListView,如图设置 2.在FormCreate事件中写如下代码:     ListView1->Rea ...

  2. 设置TextBox控件的TextMode属性

    我想在程式代碼中將TextBox控件的TextMode属性设置為Password,寫成TextBox1.TextMode=MultiLine和TextBox1.TextMode="Multi ...

  3. C#控件及常用属性

    1.窗体(Form) 1.常用属性 (1)Name 属性:用来获取或设置窗体的名称,在应用程序中可通过Name 属性来引用窗体. (2) WindowState 属性: 用来获取或设置窗体的窗口状态. ...

  4. C#控件方法及属性大全,望补充

    C#控件及常用设计整理 1.窗体 常用属性 (1)Name属性:用来获取或设置窗体的名称,在应用程序中可通过Name属性来引用窗体. (2) WindowState属性: 用来获取或设置窗体的窗口状态 ...

  5. 一个可以设置所有子控件是否可以点击的Layout的实现

    http://www.cnblogs.com/csonezp/p/4956315.html 最近在做一个功能,想在某个状态设置整个界面不可点击,后台任务执行完毕后再可以点击. 最直观的想法是直接让所有 ...

  6. winform中的dateTimePicker控件设置默认值为空

    winform中的dateTimePicker控件设置默认值为空   第一步:设置Format的属性值为“Custom” 第二步:设置CustomFormat的属性值为空,需要按一个空格键

  7. django django中的HTML控件及参数传递方法 以及 HTML form 里的数据是怎么被包成http request 的?如何在浏览器里查看到这些数据?

    https://www.jb51.net/article/136738.htm django中的HTML控件及参数传递方法 下面小编就为大家分享一篇django中的HTML控件及参数传递方法,具有很好 ...

  8. 【VS开发】在VS2010中开发ActiveX控件设置测试容器的方式

    在VS2010中开发ActiveX控件设置测试容器的方式 借鉴文章http://blog.csdn.net/waxgourd0/article/details/7374669 在VS2010中开发MF ...

  9. C#中的WebBrowser控件的使用

    0.常用方法   Navigate(string urlString):浏览urlString表示的网址 Navigate(System.Uri url):浏览url表示的网址 Navigate(st ...

随机推荐

  1. FZYZOJ-1144 恶魔城

    P1144 -- 恶魔城 时间限制:1000MS      内存限制:131072KB 状态:Accepted      标签:    图论-最短路   二分   无 Description 上帝需要 ...

  2. HDU 2089 不要62(挖个坑=-=)

    不要62 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submi ...

  3. Hdu 3966-Aragorn's Story LCT,动态树

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=3966 Aragorn's Story Time Limit: 10000/3000 MS (Java/Ot ...

  4. asterisk manager api 配置 (manager.conf)

    http://blog.csdn.net/niino/article/details/5748805 要激活AMI,需要在/etc/asterisk/manager.conf中,[general]块下 ...

  5. 京东集团副总裁李大学:像CEO一样思考 - Dancen的专栏 - 博客频道 - CSDN.NET

    京东集团副总裁李大学:像CEO一样思考 - Dancen的专栏 - 博客频道 - CSDN.NET 京东集团副总裁李大学:像CEO一样思考

  6. poj 1789 Truck History【最小生成树prime】

    Truck History Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 21518   Accepted: 8367 De ...

  7. cocoaPods教程

    <#这个不是命令,包括尖括号#> 一.源设置 1. 查看源,终端输入:  sudo gem sources -l 2. 删除已有的源,如:  sudo gem sources --remo ...

  8. C#在ASP.NET4.5框架下的首次网页应用

    运行效果预览: 先看实践应用要求: 1.编写一个函数,用于计算1!+2!+3!+4!+5!,在控制台或页面输出运行结果. 2.在控制台或页面输出九九乘法表. 3.输入10个以内的整数,输出该组整数的降 ...

  9. 几个 PHP 的“魔术常量”

    PHP 向它运行的任何脚本提供了大量的预定义常量.不过很多常量都是由不同的扩展库定义的,只有在加载了这些扩展库时才会出现,或者动态加载后,或者在编译时已经包括进去了. 有八个魔术常量它们的值随着它们在 ...

  10. mysqldump备份数据库时出现when using LOCK TABLES

    用mysqldump备份数据库时,如果出现when using LOCK TABLES,解决办法是加上 --skip-lock-tables 例如: 用mysqldump备份数据库时出现 29: Fi ...