WinForm中,怎么在TextBox里面禁止掉自身的 “撤销”、“重做”功能?

解决方案 »

  1.   

    继承从TextBox,重写WndProc,参见如下:
    public class textbox : TextBox
    {
    protected override void WndProc(ref Message m)
    {
    if (m.Msg != 0x304)
    {
    base.WndProc(ref m);
    }
    }
    }
      

  2.   

    搂主是想屏蔽TextBox自带的Ctrl+Z是吧,用下面的试下bool handled = false;
    private void textBox1_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e)
    {
        if(e.Control && e.KeyCode == Keys.Z)
        handled = true;
    }

    private void textBox1_KeyPress(object sender, System.Windows.Forms.KeyPressEventArgs e)
    {
        e.Handled = handled;
        handled=false;
    }
      

  3.   

    谢谢: hbxtlhx(平民百姓)  和 lxcnn(过客)to: hbxtlhx(平民百姓)  这个方法我是使用了,如果我只按一次 Ctrl+
    z,是不能撤销。但是我连续按3次Ctrl+ z,就可以撤销了。所以这个方法不能解决我的问题。to:lxcnn(过客) 
    没有看明白你是什么意思,全局变量handled 是作什么用的?
      

  4.   

    把条件加一下就可以了:
    if (m.Msg != 0xC7 && m.Msg != 0x454 && m.Msg!=0x304)
    {
    base.WndProc(ref m);
    }
      

  5.   

    全局变量handled 用来记录按键状态,在textBox1_KeyDown事件里判断按下的是否是Ctrl+Z,如果是,handled = true;,此时进入textBox1_KeyPress事件,e.Handled = handled;即为e.Handled = true;即不处理这一事件,从而达到屏蔽Ctrl+Z的目的设断点跟踪一下就知道了
      

  6.   

    谢谢 hbxtlhx(平民百姓)to: hbxtlhx(平民百姓)
    我使用的是 RichTextBox,然后这样写,仍旧是按3次ctrl+z就可以撤销。
    protected override void WndProc(ref Message m)
            {
                if (m.Msg != 0xC7 && m.Msg != 0x454 && m.Msg != 0x304)
                {
                    base.WndProc(ref m);
                }
            }
      

  7.   

    to lxcnn(过客) 
    我也按照你的方法试过了,按一次ctrl+z是不可以撤销。但是连续按3次ctrl+z就撤销上一次的操作。
      

  8.   

    ClearUndo 方法 方法清除一下吧:
    用TextBoxBase.ClearUndo 方法 
    从该文本框的撤消缓冲区中清除关于最近操作的信息。备注
    根据应用程序的状态,可以使用此方法防止重复执行撤消操作。
      

  9.   

    TextBox用上面的方法,RichTextBox有自己的方法,在richTextBox1_TextChanged事件里用richTextBox1.ClearUndo();即可
      

  10.   

    结贴 
    只给private void myRichTextBox1_TextChanged(object sender, EventArgs e)
    {
    }
    里面加一句代码: myRichTextBox1.ClearUndo();就可以禁止掉RichTextBox自身的撤销功能。谢谢 lxcnn(过客)  和 hbxtlhx(平民百姓)
    散分 
    lxcnn(过客) 30 
    hbxtlhx(平民百姓)20
      

  11.   

    lxcnn(过客) 30 
    hbxtlhx(平民百姓)20
    ---------------
    这样哪行啊,要结贴选管理才行啊:)
      

  12.   

    另外楼主可以把RichTextBox的ShortcutsEnabled属性设置为False,以消除快捷键的的使用,比如:this.richTextBox.ShortcutsEnabled=false;这样就可以禁用下面的组合快捷键:
    Ctrl+Z Ctrl+E Ctrl+C Ctrl+Y Ctrl+X Ctrl+Backspace Ctrl+V Ctrl+Delete Ctrl+A Shift+Delete Ctrl+L Shift+Insert Ctrl+R