当前位置: 首页 > news >正文

Mobile Web Application中的TextArea控件开发(一)

其实这篇文章本不想写的,但是考虑到这件事也折腾了我大半天的,唉...记下来也给自己一个总结吧.
 
在用VS.NET做移动WEB开发时,很明显有一个控件是非常有用但是VS.NET却没有提供的,那就是TextArea,多行输入.
 
我Google了一下,发现有一篇文章介绍如何自定义这个控件, 原文在这里. 另外,在asp.net网站也有一个现成的控件可以下载, 参考这里.
 
大家可以直接去看我上面提供的两个链接,也可以接着往下看,我会先简要地介绍一下代码开发,然后重点是总结在配置方面的问题.而这一点,上面老外的文章中却言之甚少.
 
开发一个自定义控件,要自己实现两个类,一是派生于某个控件的你想要的控件类,二是负责将这个控件Render出来的适配器类(Adapter).
 
首先,我们实现一个叫MultiLineTextBox类,派生于TextBox类,比较简单,就是多了两个属性Cols和Rows.代码如下: 
None.gif   public   class  MultiLineTextBox : System.Web.UI.MobileControls.TextBox
ExpandedBlockStart.gifContractedBlock.gif 
dot.gif
InBlock.gif  
InBlock.gif  
private int _cols=0;
InBlock.gif  
public int Cols
ExpandedSubBlockStart.gifContractedSubBlock.gif  
dot.gif{
ExpandedSubBlockStart.gifContractedSubBlock.gif   
getdot.gifreturn this._cols; }
ExpandedSubBlockStart.gifContractedSubBlock.gif   
setdot.gifthis._cols=value; }
ExpandedSubBlockEnd.gif  }
 
InBlock.gif  
private int _rows=0;
InBlock.gif  
public int Rows
ExpandedSubBlockStart.gifContractedSubBlock.gif  
dot.gif{
ExpandedSubBlockStart.gifContractedSubBlock.gif   
getdot.gifreturn this._rows; }
ExpandedSubBlockStart.gifContractedSubBlock.gif   
setdot.gifthis._rows=value; }
ExpandedSubBlockEnd.gif  }

ExpandedBlockEnd.gif }
  
当然你也可以象老外文章那样,直接把两个属性值放在ViewState中,如果你不打算在你的程序中禁用ViewState的话,这应该是一个更好的办法.
 
第二步,实现一个派生于ControlAdapter的MultiLineTextBoxAdapter类,重载一个属性和一个方法即可.代码如下:
None.gif public   class  HTMLMultiLineTextBoxAdapter : System.Web.UI.MobileControls.Adapters.ControlAdapter
ExpandedBlockStart.gifContractedBlock.gif 
dot.gif {
InBlock.gif  
protected new MultiLineTextBox Control
ExpandedSubBlockStart.gifContractedSubBlock.gif  
dot.gif{
ExpandedSubBlockStart.gifContractedSubBlock.gif   
get  dot.gif{  return (MultiLineTextBox)base.Control;   }
ExpandedSubBlockEnd.gif  }

InBlock.gif 
InBlock.gif  
public override void Render(HtmlTextWriter writer)
ExpandedSubBlockStart.gifContractedSubBlock.gif  
dot.gif{
InBlock.gif   writer.WriteBeginTag(
"textarea");
InBlock.gif      
InBlock.gif   String renderName;
InBlock.gif   
if(Device.RequiresAttributeColonSubstitution)
ExpandedSubBlockStart.gifContractedSubBlock.gif   
dot.gif{
InBlock.gif    renderName 
= Control.UniqueID.Replace(':'',');
ExpandedSubBlockEnd.gif   }

InBlock.gif   
else
ExpandedSubBlockStart.gifContractedSubBlock.gif   
dot.gif{
InBlock.gif    renderName 
= Control.UniqueID;
ExpandedSubBlockEnd.gif   }

InBlock.gif   writer.WriteAttribute(
"name", renderName);  
InBlock.gif   writer.WriteAttribute(
"cols",Control.Cols.ToString());
InBlock.gif   writer.WriteAttribute(
"rows",Control.Rows.ToString());
InBlock.gif      
InBlock.gif   writer.Write(
">");
InBlock.gif   writer.Write(Control.Text);
InBlock.gif   writer.WriteEndTag(
"textarea");
InBlock.gif
ExpandedSubBlockEnd.gif  }

ExpandedBlockEnd.gif }

None.gif
 
 
属性Control的重载说明我要管理的类叫MultiLineTextBox.而重载的Render方法则具体了如何在页面中去表现这个控件,就是输出一个textarea标签.
 
第三步,修改web.config,增加对设备的支持,我就是在这一步被卡住了...先提交吧,下一篇再讨论.
 
 

转载于:https://www.cnblogs.com/sharetop/archive/2005/08/16/215920.html

相关文章:

  • Java中OOP对象和引用
  • 制作软件启动画面
  • centos7 给未知屏幕添加分辨率
  • 用DuinoMite-Mini做的苹果电脑
  • 处理ERP 中BILLING被锁住的方法
  • Interview
  • 使用SQLDMO中“接口SQLDMO.Namelist 的 QueryInterface 失败”异常的解决方法
  • filezilla
  • 管理十大经典理论[转]
  • C# 中的委托
  • 利用v$enqueue_lock解决ORA-14450的错误
  • [Ariticle] 厚黑之道 一 小狐狸听故事
  • 23种设计模式彩图
  • Html5 8个强大的基于Bootstrap的CSS框架
  • url定向的问题
  • ES6系统学习----从Apollo Client看解构赋值
  • java概述
  • JAVA之继承和多态
  • js作用域和this的理解
  • mac修复ab及siege安装
  • mysql 数据库四种事务隔离级别
  • MySQL常见的两种存储引擎:MyISAM与InnoDB的爱恨情仇
  • python学习笔记 - ThreadLocal
  • 百度贴吧爬虫node+vue baidu_tieba_crawler
  • 从tcpdump抓包看TCP/IP协议
  • 规范化安全开发 KOA 手脚架
  • 前端性能优化--懒加载和预加载
  • 容器服务kubernetes弹性伸缩高级用法
  • 手机端车牌号码键盘的vue组件
  • 线性表及其算法(java实现)
  • 小程序 setData 学问多
  • ionic入门之数据绑定显示-1
  • 浅谈sql中的in与not in,exists与not exists的区别
  • ​Base64转换成图片,android studio build乱码,找不到okio.ByteString接腾讯人脸识别
  • # 计算机视觉入门
  • #NOIP 2014# day.2 T2 寻找道路
  • #我与Java虚拟机的故事#连载02:“小蓝”陪伴的日日夜夜
  • $.type 怎么精确判断对象类型的 --(源码学习2)
  • %3cli%3e连接html页面,html+canvas实现屏幕截取
  • (1/2) 为了理解 UWP 的启动流程,我从零开始创建了一个 UWP 程序
  • (13)[Xamarin.Android] 不同分辨率下的图片使用概论
  • (C语言)求出1,2,5三个数不同个数组合为100的组合个数
  • (Redis使用系列) SpringBoot中Redis的RedisConfig 二
  • (编程语言界的丐帮 C#).NET MD5 HASH 哈希 加密 与JAVA 互通
  • (动手学习深度学习)第13章 计算机视觉---微调
  • (二开)Flink 修改源码拓展 SQL 语法
  • (附源码)小程序 交通违法举报系统 毕业设计 242045
  • (强烈推荐)移动端音视频从零到上手(下)
  • (十)【Jmeter】线程(Threads(Users))之jp@gc - Stepping Thread Group (deprecated)
  • (十八)用JAVA编写MP3解码器——迷你播放器
  • (四)docker:为mysql和java jar运行环境创建同一网络,容器互联
  • (转)IIS6 ASP 0251超过响应缓冲区限制错误的解决方法
  • (转)ORM
  • ***linux下安装xampp,XAMPP目录结构(阿里云安装xampp)
  • ..thread“main“ com.fasterxml.jackson.databind.JsonMappingException: Jackson version is too old 2.3.1