c#winforms事件在escape上恢复文本框内容

时间:2010-05-18 17:25:09

标签: c# textbox key escaping event-handling

在2008 Express中使用c#。我有一个包含路径的文本框。我在离开事件的最后附加一个“\”。如果用户按下“退出”键,我希望恢复旧内容。当我输入所有文本并按“Escape”时,我会听到重击并且旧文本未恢复。这就是我到目前为止所拥有的......

    public string _path;
    public string _oldPath;

        this.txtPath.KeyPress += new System.Windows.Forms.KeyPressEventHandler(txtPath_CheckKeys);
        this.txtPath.Enter +=new EventHandler(txtPath_Enter);
        this.txtPath.LostFocus += new EventHandler(txtPath_LostFocus);

    public void txtPath_CheckKeys(object sender, KeyPressEventArgs kpe)
    {           if (kpe.KeyChar == (char)27)
        {
            _path = _oldPath;
        }
    }

    public void txtPath_Enter(object sender, EventArgs e)
    {
        //AppendSlash(sender, e);
        _oldPath = _path;
    }
    void txtPath_LostFocus(object sender, EventArgs e)
    {
        //throw new NotImplementedException();
        AppendSlash(sender, e);
    }
    public void AppendSlash(object sender, EventArgs e) 
    {
        //add a slash to the end of the txtPath string on ANY change except a restore
        this.txtPath.Text += @"\";
    }

提前致谢,

2 个答案:

答案 0 :(得分:3)

您的txtPath_CheckKeys函数指定旧路径的路径,但从不实际更新TextBox中的Text。我建议将其更改为:

public void txtPath_CheckKeys(object sender, KeyPressEventArgs kpe)
{
    if (kpe.KeyCode == Keys.Escape)
    {
        _path = _oldPath;
        this.txtPath.Text = _path;
    }
}

答案 1 :(得分:1)

Control.Validating事件可能会对您有所帮助。

它描述了触发事件的顺序。因此,选择最适合您需求的活动可以更轻松地实现此功能。

可能需要太多,但尝试Invalidate控制也可能有所帮助。

让我知道它是否有帮助。