posts - 38, comments - 2, trackbacks - 0, articles - 0
            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

          擴展TextField,合理計算中文字符長度

          Posted on 2009-07-03 14:47 AntiquMan 閱讀(518) 評論(0)  編輯  收藏 所屬分類: Flex
          Code
           
          01.//Copyright © 2009. Http://L4cd.Net All Rights Reserved.
          02.package net.L4cd.display
          03.{
          04.    import flash.events.Event;
          05.    import flash.events.TextEvent;
          06.    import flash.text.TextField;
          07.    import flash.utils.ByteArray;
          08.  
          09.    /**
          10.     * 擴展TextField類,中文以2字符長度計算
          11.     *
          12.     * @author L4cd.Net
          13.     * @playerversion Flash player 9
          14.     * @langversion 3.0
          15.     * @version 2009-06-16
          16.     */
          17.    public class TextFieldExt extends TextField
          18.    {
          19.        private var _maxChars:int = -1;
          20.        public function TextFieldExt()
          21.        {
          22.            super();
          23.              
          24.        }
          25.        override public function get maxChars():int
          26.        {
          27.            return _maxChars;
          28.        }
          29.        override public function set maxChars(value:int):void
          30.        {
          31.            _maxChars = value;
          32.            if(maxChars<0)
          33.            {
          34.                removeEventListener(TextEvent.TEXT_INPUT,input);      
          35.            }else
          36.            {
          37.                addEventListener(TextEvent.TEXT_INPUT,input);
          38.                text = getTextByCharLength(text,maxChars);
          39.            }
          40.        }
          41.        override public function get length():int
          42.        {
          43.            return getCharLength(text);
          44.        }
          45.        private function input(e:TextEvent):void
          46.        {
          47.            //攔截并阻止textinput事件,手動處理內容輸入
          48.            var textField:TextField = e.currentTarget as TextField;
          49.            var temp:String = getTextByCharLength(e.text,maxChars - getCharLength(text) + getCharLength(selectedText));
          50.            var index:int = selectionBeginIndex;
          51.            replaceText(selectionBeginIndex,selectionEndIndex,temp);
          52.            setSelection(index+temp.length,index+temp.length);
          53.            dispatchEvent(new Event(Event.CHANGE,true));
          54.            e.preventDefault();
          55.        }
          56.        /**
          57.         * 獲取字符長度,一個中文算2長度
          58.         * @param txt
          59.         * @return 返回長度值
          60.         */    
          61.        private function getCharLength(txt:String):int
          62.        {
          63.            var byte:ByteArray = new ByteArray();
          64.            byte.writeMultiByte(txt,"gb2312");
          65.            byte.position = 0;
          66.            return byte.bytesAvailable;
          67.        }
          68.        /**
          69.         * 截取指定長度的文本內容,一個中文算2長度
          70.         * @param txt 需要截取的文本
          71.         * @param length 需要截取的長度
          72.         * @return 截取后的內容
          73.         */    
          74.        private function getTextByCharLength(txt:String,length:int):String
          75.        {
          76.            if(length<1)return "";
          77.            var byte:ByteArray = new ByteArray();
          78.            byte.writeMultiByte(txt,"gb2312");
          79.            byte.position = 0;
          80.            return byte.readMultiByte(Math.min(length,byte.bytesAvailable),"gb2312");
          81.        }
          82.    }
          83.}




          調用方法和普通TextField無異
          1.import net.L4cd.display.TextFieldExt
          2.var ext:TextFieldExt = new TextFieldExt();
          3.ext.maxChars = 15;
          4.addChild(ext);





          一般的輸入,粘貼等操作均沒問題..
          直接對text進行賦值沒有進行限制 (原來的TextField也沒限制)..
          如需限制~可以調用一次maxChars = maxChars即可..

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 旬邑县| 盐亭县| 四川省| 夹江县| 财经| 电白县| 乌拉特中旗| 内丘县| 略阳县| 高安市| 沙田区| 仙桃市| 芒康县| 赤峰市| 吉首市| 清新县| 太康县| 凤庆县| 望谟县| 色达县| 丹巴县| 开阳县| 南漳县| 寿光市| 江阴市| 宝应县| 河间市| 拉萨市| 象山县| 彭阳县| 上蔡县| 武安市| 通山县| 尚义县| 九江市| 社会| 鄂尔多斯市| 梁河县| 房山区| 东方市| 凭祥市|