Форма, возвращающая ноль после возвращения к начальному пользовательскому элементу управления - PullRequest
3 голосов
/ 01 апреля 2012

Я новичок в формах Windows, и у меня проблема с обработкой всех пользовательских элементов управления. У меня есть 3 пользовательских элемента управления, и когда я нажимаю кнопку подтверждения, я перехожу на второй экран (пользовательский элемент управления 2), но затем, когда я нажимаю кнопку «Отмена» на втором экране, он возвращает меня к первому экрану (я загружаю первый снова пользовательский элемент управления) теперь проблема заключается в том, что при повторном нажатии кнопки «Принять» пользовательский элемент управления приветствия возвращает ноль и ошибки.

private void Viewer_Load (отправитель объекта, EventArgs e) { formPanel.Controls.Clear (); formPanel.Controls.Add (вэй); }

    private void SwapControls(object sender, EventArgs e)
    {
        if (formPanel.Controls.Contains(wel))
        {
            formPanel.Controls.Remove(wel);
            formPanel.Controls.Add(p);
        }
        else if (formPanel.Controls.Contains(pin) && IsAuthenticated)
        {
            formPanel.Controls.Remove(p);
            formPanel.Controls.Add(m);
        }
        else if(formPanel.Controls.Contains(pin) && !Global.IsAuthenticated)
        {
            formPanel.Controls.Remove(p);
            formPanel.Controls.Add(wel);
        }

Таким образом, в первый раз он загружает желаемый пользовательский элемент управления, затем я нажимаю «Принять», и он очищает пользовательский элемент управления и загружает второй «Ввод Pin Control», после чего я нажимаю «Отмена». удалить этот пользовательский элемент управления и загрузить снова Добро пожаловать. НО теперь, когда я нажимаю Принять, я получаю ноль в этой строке в элементе управления приветствия пользователя

 this.AddControl(this, new EventArgs());

Опять же, я новичок в формах Windows, и я учусь, любые отзывы будут высоко ценится.

1 Ответ

3 голосов
/ 01 апреля 2012

Поскольку вы повторно используете UserControls, не удаляйте обработчики, когда вы удаляете их из Form, просто убедитесь, что вы удалили их, когда закончили использовать UserControls.

Попробуйте что-то вроде этого.

private void SwapControls(object sender, EventArgs e) 
{ 
    if (formPanel.Controls.Contains(wel)) 
    { 
        formPanel.Controls.Remove(wel); 
        formPanel.Controls.Add(pin); 
    } 
    else if (formPanel.Controls.Contains(pin) && Global.Instance.IsAuthenticated) 
    { 
        formPanel.Controls.Remove(pin); 
        formPanel.Controls.Add(mmenu); 
    } 
    else 
    { 
        formPanel.Controls.Remove(pin); 
        formPanel.Controls.Add(wel); 
    } 
} 

/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
    wel.AddControl -= new EventHandler(SwapControls);
    pin.AddControl -= new EventHandler(SwapControls);
    pin.ReturnWelcome -= new EventHandler(SwapControls); 

    if (disposing && (components != null))
    {
        components.Dispose();
    }
    base.Dispose(disposing);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...