Extjs4 关于设置form中所有子控件为readOnly属性的解决方案
之前在网上找了一堆,但那些确实没法用,后来考虑了一下,发现主要是网上提供的假设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属性的解决方案的更多相关文章
- TListView控件的ReadOnly属性的一个Bug
不知道是不是ListView的 ReadOnly属性的一个bug 1.Form上一个ListView,如图设置 2.在FormCreate事件中写如下代码: ListView1->Rea ...
- 设置TextBox控件的TextMode属性
我想在程式代碼中將TextBox控件的TextMode属性设置為Password,寫成TextBox1.TextMode=MultiLine和TextBox1.TextMode="Multi ...
- C#控件及常用属性
1.窗体(Form) 1.常用属性 (1)Name 属性:用来获取或设置窗体的名称,在应用程序中可通过Name 属性来引用窗体. (2) WindowState 属性: 用来获取或设置窗体的窗口状态. ...
- C#控件方法及属性大全,望补充
C#控件及常用设计整理 1.窗体 常用属性 (1)Name属性:用来获取或设置窗体的名称,在应用程序中可通过Name属性来引用窗体. (2) WindowState属性: 用来获取或设置窗体的窗口状态 ...
- 一个可以设置所有子控件是否可以点击的Layout的实现
http://www.cnblogs.com/csonezp/p/4956315.html 最近在做一个功能,想在某个状态设置整个界面不可点击,后台任务执行完毕后再可以点击. 最直观的想法是直接让所有 ...
- winform中的dateTimePicker控件设置默认值为空
winform中的dateTimePicker控件设置默认值为空 第一步:设置Format的属性值为“Custom” 第二步:设置CustomFormat的属性值为空,需要按一个空格键
- django django中的HTML控件及参数传递方法 以及 HTML form 里的数据是怎么被包成http request 的?如何在浏览器里查看到这些数据?
https://www.jb51.net/article/136738.htm django中的HTML控件及参数传递方法 下面小编就为大家分享一篇django中的HTML控件及参数传递方法,具有很好 ...
- 【VS开发】在VS2010中开发ActiveX控件设置测试容器的方式
在VS2010中开发ActiveX控件设置测试容器的方式 借鉴文章http://blog.csdn.net/waxgourd0/article/details/7374669 在VS2010中开发MF ...
- C#中的WebBrowser控件的使用
0.常用方法 Navigate(string urlString):浏览urlString表示的网址 Navigate(System.Uri url):浏览url表示的网址 Navigate(st ...
随机推荐
- PHP函数:PHP_SELF
php_self是php的内置变量,记作$php_self,其作用是实现“页内跳转”.这里的页内跳转不同等于html的书签之类的跳转,而是php程序通过URL的尾参数的改变在同一个程序里提供不同的We ...
- lightoj 1033 区间dp
题目链接:http://lightoj.com/volume_showproblem.php?problem=1033 #include <cstdio> #include <cst ...
- C#-Mdi多文档窗体及其子窗体的排列 ---ShinePans
MdiLayout枚举成员及说明 Casecade s全部Mdi层叠在父窗体 TileHorizontal 水平平铺 TitleVertical 垂直平铺 Form1.cs (mdi) using S ...
- INERT DELEYED、INSERT IGNORE replace into和insert区别
insert into表示插入数据,数据库会检查主键,如果出现重复会报错:replace into表示插入替换数据,需求表中有PrimaryKey,或者unique索引,如果数据库已经存在数据 ...
- Qt 学习之路 :视图代理
与 Qt model/view 架构类似,在自定义用户界面中,代理扮演着重要的角色.模型中的每一个数据项都要通过一个代理向用户展示,事实上,用户看到的可视部分就是代理. 每一个代理都可以访问一系列属性 ...
- Java theory and practice: Thread pools and work queues--reference
Why thread pools? Many server applications, such as Web servers, database servers, file servers, or ...
- android开发之service详解
service作为android的四大组件之一,其重要性可想而知,在开发中,我们经常把一些不需要与用户进行交互的工作放在service中来完成,service运行在后台,这样有些人可能会产生错觉,以为 ...
- Linux - CentOS6.5服务器搭建与初始化配置详解(上)
1.新建一个虚拟机 选择典型 单机下一步 p.MsoNormal,li.MsoNormal,div.MsoNormal { margin: 0cm 0cm 0.0001pt; text-align: ...
- Android 使用弹出对话框,报Unable to add window错误
今天在使用Android弹出对话框的时候,报了一个unable to add window错误,我的代码如下 new AlertDialog.Builder(getApplicationContext ...
- U3D 脚本添加和获得对象
有时候,一开始可能没有对象,而是由于某种触发,产生的一个对象,这里讲解下,如何通过脚本来创建一个对象: 这是通过脚本创建一个立方体: using UnityEngine; using System.C ...