vs2005(中英版本下)的Bug 有个form1,上面有一个文本筐,一个按扭。
按扭显示另外一个form2。form2有一个文本筐。
程序运行:
在form1中的文本筐中输入中文。
点几按扭。显示form2.在form2中的文本筐中输入中文。后关闭这个form2输入法自动转化为全角了
如果使用微软拼音输入发的话。在两个文本筐中分别输入。同样出现自动切换怎么解决啊?
按扭显示另外一个form2。form2有一个文本筐。
程序运行:
在form1中的文本筐中输入中文。
点几按扭。显示form2.在form2中的文本筐中输入中文。后关闭这个form2输入法自动转化为全角了
如果使用微软拼音输入发的话。在两个文本筐中分别输入。同样出现自动切换怎么解决啊?
用英文输入代码,然后写注释把输入法变成了微软拼音输入法2003。
按Shift键变成英文输入状态,打第一个字符是英文,第二个就变成拼音了。大Bug,如果这样的话,我换其他输入法了。
vs2005根本不能用啊。。
vs2003 倒不会出现这个问题啊
请使用正版.net和正版操作系统再试!哈哈~....
除非你是在微软上班的.
.net是免费的???
除非你是在微软上班的.
=====================================.net framework 是免费的
Visual Studio Express Editions 1年之内是免费的
只有Visual Studio 不是免费的
在vs2005 RTM中英文版本都有这个问题.而且编译器本身都有这个问题
第二次输入时,问题同样存在。
我都试过了
{
txtPath.ImeMode = ImeMode.Hangul;
}private void txtPath_ImeModeChanged(object sender, EventArgs e)
{
txtPath.ImeMode = ImeMode.Hangul;
}
恐怕自己做出来的程序也存在这个严重的问题呀!!!!!
指定为半角的就是了。
目前发现的:
1、有时子窗体初始时工具栏不好使,必须点过一次才可以。
2、日历控件多选中间是白的,只有两头蓝。
3、DATAGRIDVIEW换行没用。编辑是换行,显示不换行。
4、输入法,全角烦的要死,一天工作有1/3是在切换输入法,真不知道是怎么想的。
5、网站发布惨
水平有限,目前工作中发现的。
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
}
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
}
vs2005: 使用英文版的操作系统和英文版的vs2005,注意语言和区域不用选择东方的。
您所开发软件: 设置ImeMode属性