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 ...
随机推荐
- 通过命令名称查询进程id
linux 中如何通过命令名称查询出进程的id呢? 例如,我想查询java的进程id: ps -ef |grep java |grep -v grep|awk '{print $2}' 或者: ps ...
- HDOJ(HDU) 2519 新生晚会(组合公式)
Problem Description 开学了,杭电又迎来了好多新生.ACMer想为新生准备一个节目.来报名要表演节目的人很多,多达N个,但是只需要从这N个人中选M个就够了,一共有多少种选择方法? I ...
- C++引用(Reference)
引用(Reference)是C++语言相对于C语言的又一个扩充,类似于指针,只是在声明的时候用&取代了*.引用可以看做是被引用对象的一个别名,在声明引用时,必须同时对其进行初始化.引用的声明方 ...
- Ubuntu学习笔记-win7&Ubuntu双系统简单搭建系统指南
win7&Ubuntu双系统简单搭建系统指南 本文是自己老本子折腾Ubuntu的一些记录,主要是搭建了一个能够足够娱乐(不玩游戏)专注练习自己编程能力的内容.只是简单的写了关于系统的安装和一些 ...
- Python中AND-OR的用法
学习Python中的lambda函数的时候,才发现原来Python中的AND和OR还可以有一些别的用法.Python中的布尔逻辑计算的结果并非返回布尔值,而是返回它们相互之间的某一个.文章的部分例子来 ...
- github 上的pull request总结
自己先要fork别人的代码. 然后把代码git clone到本地.. 当自己有提交的时候, 可以在git commit之后 git push origin master 然后这份git push or ...
- 线程join
class ThreadB extends Thread { private String ID="0"; private int time=0; pu ...
- 《算法问题实战策略》——chaper9——动态规划法技巧
Q1: 数字游戏: 两个人(A.B)用n个整数排成的一排棋盘玩游戏,游戏从A开始,每个人有如下操作: (1) 拿走棋盘最右侧或者最左侧的棋子,被拿走的数字从棋盘中抹掉. (2) 棋盘中还剩 ...
- 内存数据库MemSQL ——基于内存,MVCC+哈希表、跳表
本周数据库业界探讨最火热的话题就是MemSQL,究竟是不是"旧瓶装新酒"引发了诸多的辩论,同时也引发了究竟是产品技术重要还是DBA重要的疑问.网络中有一些关于MemSQL的介绍,基 ...
- 善用VS中的Code Snippet来提高开发效率 分类: C# 2015-01-22 11:06 69人阅读 评论(0) 收藏
前言 在谈谈VS中的模板中,我介绍了如何创建项目/项模板,这种方式可以在创建项目时省却不少重复性的工作,从而提高开发效率.在创建好了项目和文件后,就得开始具体的编码了,这时又有了新的重复性工作,就是 ...