VS2005IDE中输入法全角的简单问题
属性窗口进入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





