vs2005(中英版本下)的Bug 有个form1,上面有一个文本筐,一个按扭。
按扭显示另外一个form2。form2有一个文本筐。
程序运行:
在form1中的文本筐中输入中文。
点几按扭。显示form2.在form2中的文本筐中输入中文。后关闭这个form2输入法自动转化为全角了
如果使用微软拼音输入发的话。在两个文本筐中分别输入。同样出现自动切换怎么解决啊?

解决方案 »

  1.   

    呵呵。去另外机器上试试。如果证实是微软的bug,楼主就发了。前提是你用的是正版。
      

  2.   

    我的也出现这个问题。在C#的代码编辑器里面
    用英文输入代码,然后写注释把输入法变成了微软拼音输入法2003。
    按Shift键变成英文输入状态,打第一个字符是英文,第二个就变成拼音了。大Bug,如果这样的话,我换其他输入法了。
      

  3.   

    我觉得这可能不是BUG 这可能是全面支持 UNICODE
      

  4.   

    不会是像 vs.net 2003 的自动加入<FONT face="宋体"></FONT> 这种恼人的 bug 吧?
      

  5.   

    假如不能解决这个问题话
    vs2005根本不能用啊。。
    vs2003 倒不会出现这个问题啊
      

  6.   


    请使用正版.net和正版操作系统再试!哈哈~....
      

  7.   

    我们用的就是正版,也有这个问题. .net是免费的, 系统是装机带的, 至少应该算正版.
      

  8.   

    .net是免费的???
    除非你是在微软上班的.
      

  9.   

    baosl2005(小鱼) ( ) 信誉:100  2006-3-22 18:03:52  得分: 0  
     
     
       
    .net是免费的???
    除非你是在微软上班的.  
     
    =====================================.net framework 是免费的
    Visual Studio Express Editions 1年之内是免费的
    只有Visual Studio 不是免费的
      

  10.   

    vs2005 Beta2没这个问题
    在vs2005 RTM中英文版本都有这个问题.而且编译器本身都有这个问题
      

  11.   

    在http://forums.microsoft.com/msdn-cht/ShowPost.aspx?PostID=256511&SiteID=14也有人提问,处理的办法是把ImeMode设定成Close没有实际测试,效果未知.
      

  12.   

    把ImeMode 设置成Close没有用
    第二次输入时,问题同样存在。
    我都试过了
      

  13.   

    有一个补救的办法,在TextBox的Enter事件中把ImeMode设置成 Hangul你可以试试
      

  14.   

    或者自己继承写个自定义的文本输入框,然后里面自动设置ImeMode成Hangul这样就不用在界面中设置了--MS 的这个做法严重伤害了中国人民的感情,我么对此表示无比的愤慨和强烈的抗议! :)
      

  15.   

    不好意思,我发现还在ImeModeChange事件中加,否则还是有问题像下面这个样子,应当就可以了:private void txtPath_Enter(object sender, EventArgs e)
    {
    txtPath.ImeMode = ImeMode.Hangul;
    }private void txtPath_ImeModeChanged(object sender, EventArgs e)
    {
    txtPath.ImeMode = ImeMode.Hangul;
    }
      

  16.   

    我在MSDN2005中都发现这个问题了,
    恐怕自己做出来的程序也存在这个严重的问题呀!!!!!
      

  17.   

    VS 2005 英文正式版,无这个BUG,用任何输入法输入中/英文均正常
      

  18.   

    imemode = imdemode.kankanhalf;
    指定为半角的就是了。
      

  19.   

    2005华而不实,有些小的但让人恶心问题。看了界面挺好的,赶了个时髦,把一个项目升级了。第一天博得了一句夸奖,好看多了。后来就在抱怨中过日子
    目前发现的:
    1、有时子窗体初始时工具栏不好使,必须点过一次才可以。
    2、日历控件多选中间是白的,只有两头蓝。
    3、DATAGRIDVIEW换行没用。编辑是换行,显示不换行。
    4、输入法,全角烦的要死,一天工作有1/3是在切换输入法,真不知道是怎么想的。
    5、网站发布惨
    水平有限,目前工作中发现的。
      

  20.   

    “DATAGRIDVIEW换行没用”这个好像有用吧,要把默认单元格格式的wrapmode设置为true才起作用
      

  21.   

    英文版的都会有那样的问题,不是bug
      

  22.   

    把所有TextBox控件或者所在Form的ImeMode设为'On'即可,偶尔会在第一次切换窗口时出现问题,可能和系统环境有关,一次性的手工切换为半角后就好了
      

  23.   

    http://www.cnblogs.com/name-lh/archive/2006/04/13/374337.html
      

  24.   

    这是一个微软的一个大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
    }
      

  25.   

    根据网上内容,我又重新修改了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
    }
      

  26.   

    这并非是Microsoft的bug,这只是微软在开发的时候考虑到东方人使用多字节文字,所以为了方便就自动切换到全角了。但事实上微软的此举越帮越忙,得到的效果相反。解决办法:
    vs2005:         使用英文版的操作系统和英文版的vs2005,注意语言和区域不用选择东方的。
    您所开发软件:  设置ImeMode属性