专注于 ActionScript 3.0 在各应用领域的研究。
« Flex3 Cookbook 下载用Flex开发的基于PureMVC框架的五子棋游戏(包含源代码) »

NumericStepper组件中选中文本右移的解决方法

   这个问题不知道在flex中NumericStepper组件会不会有,现在说的是flash cs3 的NumericStepper组件

   其实问题简单说是:在NumericStepper组件中,选中文本然后鼠标向右拖动会产生空白区域

   分析一下问题产生的根本原因

   NumericStepper组件其实分为2个部分一部分是右侧可以用来点击上下的按钮区域,另外一部分是在这个按钮区域下的TextInput组件

   因为TextInput组件和NumericStepper组件同宽的,所以就是有这种情况 

   注NumericSteppertextField属性是对TextInput组件的引用

 
1、 即便设置了NumericStepper.textField.maxChars = 2
2、 即便设置了NumericStepper.textField=10(设置一个比NumericStepper.width小的值,但是无效)
3、 即便设置了NumericStepper.textField.horizontalScrollPosition = 0
4、 即便监听了NumericStepper.textField focusIn  focusOut click   change 事件
5、 甚至还监听了NumericStepper.textFieldmouseOver mouseOut事件
NumericStepper.textField.horizontalScrollPosition设置为 0(让文本从最左边开始显示)
6、 更还设置了NumericStepper.textField.textFieldscrollH属性为0
 
都无法避免下面的这种比较极端的情况且仅ie7浏览器下出现
 
就是在我点击了NumericStepper组件中的TextInput组件,然后向右移动鼠标,会出现空白,然后什么都不点的情况下,选择ie7的另外一个打开的窗口,然后再选择放flash的那个页面的时候,那个空白区域依然存在,这是因为这是ie7并没有为当前回到的那个flash页面设置为焦点,再点一下ie7的导航栏就不会有这个问题,因为ie7设置了焦点,而flash也就监听到了焦点并执行了我想要的操作。
 
看来有些时候脑子是会糊涂的,吃饭的时候我就在想,既然问题出在鼠标移动的时候,为什么不从鼠标移动这个事件来着手解决问题呢?
 
经过测试,我发现我的想法是对的
 
监听一下MouseOver事件,然后执行NumericStepper.textField.horizontalScrollPosition=0,就从根源上把问题解决了。
 
其实我很少用mouseOver事件,因为这个事件的底层是基于帧频或者timer的,比较耗费cpu资源,但是好在作为一个内部的事件,它有很好的remove机制,且仅仅用在组件上,消耗的系统资源有限且时间有限,但是可以让我省去其它无意义的监听事件,又能从根源上解决问题,所以我认为这种解决方法是可行的。不知道大家的意见如何?
 
没有想到一个看上去那么简单的方法,确实通过证明了其它方法不可行而得出的,与大家分享经验是希望有发生同样问题的时候少走弯路,节约宝贵的时间去解决其它的问题,更或许还可以找到一些解决其它问题的思路。

       最近有点活的倒回去了,很多问题搞到最后才想到解决的方法,失败。

  • quote 1.3tion
  • http://hi.baidu.com/3tion
  • 我觉得还是要按那句话来做“先代码,如果有需要在优化”。
    感觉你自己把问题复杂化了,想法忽略了简单的解决方法。
    CPU占用问题,当有必要考虑的时候再考虑吧。
  • 2008-6-4 8:43:13 回复该留言

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

日历

最新评论及回复

最近发表

Powered By Z-Blog 1.8 Spirit Build 80722 Code detection by Codefense

Copyright 2008 DMH2002's Blog Some Rights Reserved.沪ICP备07021739号