События c # winforms восстанавливают содержимое текстового поля при выходе - PullRequest
2 голосов
/ 18 мая 2010

Использование c # в 2008 Express. У меня есть текстовое поле, содержащее путь. Я добавляю "\" в конце события Leave. Если пользователь нажимает клавишу «Escape», я хочу восстановить старое содержимое. Когда я набираю текст и нажимаю «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 ]

3 голосов
/ 18 мая 2010

Ваша функция txtPath_CheckKeys назначает путь к старому пути, но фактически никогда не обновляет текст в TextBox.Я предлагаю изменить это на это:

public void txtPath_CheckKeys(object sender, KeyPressEventArgs kpe)
{
    if (kpe.KeyCode == Keys.Escape)
    {
        _path = _oldPath;
        this.txtPath.Text = _path;
    }
}
1 голос
/ 18 мая 2010

Вам может помочь событие Control.Validating.

Описывает порядок, в котором запускаются события. Поэтому, если вы выберете событие, наиболее соответствующее вашим потребностям, вам будет проще реализовать эту функцию.

Это может быть слишком много для нужд, но попытка Invalidate тоже может помочь.

Дайте мне знать, помогает ли это.

...