CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
【经验总结】不能实施并行处理的情况 浅谈并行编程中的任务分解模式
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  .NET技术 >  C#

VS2005IDE中输入法全角的简单问题

楼主zxkid(如果你有勇气迈出第一步,未来又能糟糕成什么样呢?)2006-06-19 13:25:11 在 .NET技术 / C# 提问

属性窗口进入Text,   Caption之类的属性,输入法老变成全角,非常麻烦,我真不习惯.  
  怎么设置才能使输入法保持原来的状态? 问题点数:20、回复次数:9Top

1 楼Sennet(Asen)回复于 2006-06-19 13:26:06 得分 0

我也有这个问题Top

2 楼Fibona(Fibona)回复于 2006-06-19 14:00:32 得分 0

我的就没有这个问题,你可以通过编辑选项去看看.我想应该是你的输入法的问题吧Top

3 楼zxkid(如果你有勇气迈出第一步,未来又能糟糕成什么样呢?)回复于 2006-06-28 12:41:31 得分 0

问题没解决,继续等待解决方案Top

4 楼championchen79(现学现卖)回复于 2006-06-29 16:01:20 得分 0

我刚开始在做windows应用程序的时候就那样,后来我做了几个web应用程序,再去做windows应用程序就可以了,不知道什么原因,我也没动什么配置。Top

5 楼gatr()回复于 2006-07-01 07:51:48 得分 0

这是一个微软的一个大BUG,目前无好的解决办法,我通过如下办法处理:  
  1、新建一个类:ImeForm,该类继承于Form,  
  2、在Load事件中,通过递归循环,查找所有的文本框,处理文本框的Enter事件,自动将输入法转换为半角,当然,如果其他输入控件也有类似问题,无非是在递归循环中多一个判断分支而已.  
  3、将程序中用到的Form的基类由System.Windows.Forms.Form改为ImeForm,如果以后微软解决了这个问题,改回去就可以了,ImeForm的全部代码如下:  
  using   System;  
  using   System.Collections.Generic;  
  using   System.Text;  
  using   System.Windows.Forms;  
  namespace   Lqjt  
  {  
          ///   <summary>  
          ///   解决输入法全角的问题  
          ///   </summary>  
          public   class   ImeForm   :   System.Windows.Forms.Form    
          {  
                  ///   <summary>  
                  ///   做一个标记,避免重复设置Enter事件  
                  ///   </summary>  
                  private   bool   m_AttachProcessed   =   false;  
                  ///   <summary>  
                  ///   在Load事件中遍历控件,如果是文本框,自动切换到半角状态  
                  ///   </summary>  
                  ///   <param   name="e"></param>  
                  protected   override   void   OnLoad(EventArgs   e)  
                  {  
                          base.OnLoad(e);  
                          if   (!m_AttachProcessed)  
                          {  
                                  SetImeToHangul(this.Controls);  
                                  m_AttachProcessed   =   true;  
                          }  
                  }  
   
                  ///   <summary>  
                  ///   通过递归,遍历当前窗口的全部控件  
                  ///   </summary>  
                  ///   <param   name="p_Controls">容器</param>  
                  private   void   SetImeToHangul(System.Windows.Forms.Control.ControlCollection   p_Controls)  
                  {  
                          foreach   (System.Windows.Forms.Control   ctl   in   p_Controls)  
                          {  
                                  FlowLayoutPanel   flpan   =   ctl   as   FlowLayoutPanel;  
                                  if   (flpan   !=   null)  
                                  {  
                                          SetImeToHangul(flpan.Controls);  
                                          continue;  
                                  }  
                                  GroupBox   grp   =   ctl   as   GroupBox;  
                                  if   (grp   !=   null)  
                                  {  
                                          SetImeToHangul(grp.Controls);  
                                          continue;  
                                  }  
   
                                  Panel   pan=   ctl   as   Panel;  
                                  if   (pan   !=   null)  
                                  {  
                                          SetImeToHangul(pan.Controls);  
                                          continue;  
                                  }  
                                  TabControl   tabcontrol   =   ctl   as   TabControl;  
                                  if   (tabcontrol   !=   null)  
                                  {  
                                          SetImeToHangul(tabcontrol.Controls);  
                                          continue;  
                                  }  
                                  TabPage   tabpage   =   ctl   as   TabPage;  
                                  if   (tabpage   !=   null)  
                                  {  
                                          SetImeToHangul(tabpage.Controls);  
                                          continue;  
                                  }  
                                  TableLayoutPanel   tlpan   =   ctl   as   TableLayoutPanel;  
                                  if(tlpan!=null)  
                                    {  
                                            SetImeToHangul(tlpan.Controls);  
                                          continue;  
                                  }  
                                  //文本框进入时,自动切换到半角,如果要控制其他可输入控件,参照下面的代码完成  
                                  TextBox   txtbox   =   ctl   as   TextBox;  
                                  if   (txtbox   !=   null)  
                                  {  
                                          txtbox.Enter   +=   new   EventHandler(ControlEnter_Enter);  
                                  }  
                        }  
                  }  
                  private     void   ControlEnter_Enter(object   sender,   EventArgs   e)  
                  {  
                          Control   ctl   =   sender   as   Control;  
                          if   (ctl   ==   null)  
                                  return;  
                          if   (ctl.ImeMode   !=   ImeMode.Hangul)  
                                  ctl.ImeMode   =   ImeMode.Hangul;  
                  }  
          }//class  
  }  
  Top

6 楼gatr()回复于 2006-07-01 08:20:19 得分 20

根据网上内容,我又重新修改了ImeForm,修改后的效果更好,解决了在NumbericUpDown以及用户通过Ctrl+Shift切换不能变半角的问题,新的如下:  
  using   System;  
  using   System.Collections.Generic;  
  using   System.ComponentModel;  
  using   System.Data;  
  using   System.Drawing;  
  using   System.Text;  
  using   System.Windows.Forms;  
  using   System.Runtime.InteropServices;  
   
  namespace   Lqjt  
  {  
          public   partial   class   ImeForm   :   Form  
          {  
                  public   ImeForm()  
                  {  
                          InitializeComponent();  
                  }  
                  //声明一些API函数  
                  [DllImport("imm32.dll")]  
                  public   static   extern   IntPtr   ImmGetContext(IntPtr   hwnd);  
                  [DllImport("imm32.dll")]  
                  public   static   extern   bool   ImmGetOpenStatus(IntPtr   himc);  
                  [DllImport("imm32.dll")]  
                  public   static   extern   bool   ImmSetOpenStatus(IntPtr   himc,   bool   b);  
                  [DllImport("imm32.dll")]  
                  public   static   extern   bool   ImmGetConversionStatus(IntPtr   himc,   ref   int   lpdw,   ref   int   lpdw2);  
                  [DllImport("imm32.dll")]  
                  public   static   extern   int   ImmSimulateHotKey(IntPtr   hwnd,   int   lngHotkey);  
                  private   const   int   IME_CMODE_FULLSHAPE   =   0x8;  
                  private   const   int   IME_CHOTKEY_SHAPE_TOGGLE   =   0x11;  
                  protected   override   void   OnActivated(EventArgs   e)  
                  {  
                          base.OnActivated(e);  
                          IntPtr   HIme   =   ImmGetContext(this.Handle);  
                          if   (ImmGetOpenStatus(HIme))     //如果输入法处于打开状态  
                          {  
                                  int   iMode   =   0;  
                                  int   iSentence   =   0;  
                                  bool   bSuccess   =   ImmGetConversionStatus(HIme,   ref   iMode,   ref   iSentence);     //检索输入法信息  
                                  if   (bSuccess)  
                                  {  
                                          if   ((iMode   &   IME_CMODE_FULLSHAPE)   >   0)       //如果是全角  
                                                  ImmSimulateHotKey(this.Handle,   IME_CHOTKEY_SHAPE_TOGGLE);     //转换成半角  
                                  }  
   
                          }  
                  }  
          }//form  
  }Top

7 楼zxkid(如果你有勇气迈出第一步,未来又能糟糕成什么样呢?)回复于 2006-07-02 22:17:41 得分 0

今天我安装了微软官方网站下的VS2005TeamSuite180天评估版,发现根本没有这个问题。  
  我原来装的是一个3.13G的版本。  
   
  从评估版转化成正式版还几经周折呢,化了我整整一天的时间。  
   
  从微软官方网站下载下来的VS2005TeamSuite文件是:chs_vs_2005_VSTS_180_Trial.img,一个大小为3.22G的CloneCD镜像文件,只包括VS2005Team   Suite和MSDN帮助,不包括VSS2005和Visio   2003   for   VS2005。  
   
  第一次安装时,我用Daemon   Tools装载镜像,安装顺利完成。但安装时会提示是180天试用版,安装完成后,打开VS   Envoirement显示为180天评估版。  
   
  然后我想用网上升级的方法升级到正式版,在控件面板的添加/删除程序中找到VS2005   Team   Suite,点击更改/删除,在弹出的对话框却找不到“添加注册码升级到正式版”的选项,这下我傻眼了。  
   
  怎么办?只有重装了……  
   
  网上找到的另一个升级方法是直接修改Setup目录下的Setup.sdb,将文件最后[Product   Key]节的内容改为:KYTYHTQKW6VWPBQDKC8FHWC4J  
   
  我复制出Setup.sdb修改完成后,用UltraISO覆盖原文件后,却没办法保存。UltraISO的提示大概为:无法保存,请保证其它程序不在使用此文件。  
   
  没办法,只能把虚拟光驱中所有文件复制到硬盘的一个临时目录中,再替换Setup.sdb后总算是顺利安装了,安装时也没有提示180天的试用限制。打开IDE时,也不再显示是评估版了。  
   
  可能只要是Setup.sdb文件中的[Product   Key]节有内容就不会显示“添加注册码升级到正式版”选项了。  
   
  与3.13G版本的比较:  
  官方3.22G版DVD中根目录下只有二个目录:vs和msdn,而3.13G结构不一样,msdn目录与vs的子目录混在一起,估计可能是后来复制进去的。  
   
  官方3.22G版的msdn目录大小为1.66G,而3.13G版的只有1.63G。  
   
  官方3.22G版的Setup.sdb文件中的[VSSetupWatson]节中VSSWProdVer项显示为:VSSWProdVer=8.0.50727.42.2_RTM_X86_CD,而3.13G版为:VSSWProdVer=8.0.50727.42.1_RTM_X86_CD  
   
  网上流传的包括VSS2005和Visio   2003   for   VS2005的3.7G版本我没装过,所以也无法得知msdn目录的大小和Setup.sdb文件中的[VSSetupWatson]节VSSWProdVer项的内容。请知道的朋友告诉一声。Top

8 楼nanhe0065(静中念虑澄澈,见心之本体)回复于 2006-07-07 01:49:06 得分 0

to:gatr()    
  没时间研究你的代码,直接用了。非常感谢。Top

9 楼ltolll(其实我不是打字员)回复于 2006-09-20 11:16:09 得分 0

http://blog.csdn.net/ltolll/archive/2006/09/20/1252729.aspxTop

相关问题

关键词

得分解答快速导航

  • 帖主:zxkid
  • gatr

相关链接

  • CSDN .NET频道
  • .NET类图书
  • C#类图书
  • .NET类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
惹火投票。。火热进行中...
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
CSDN网站24小时值班电话:13552009689
Copyright © 2000-2009, CSDN.NET, All Rights Reserved
GongshangLogo