在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 += @"\";
}
提前致谢,
答案 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
控制也可能有所帮助。
让我知道它是否有帮助。