Динамически загруженные пользовательские элементы управления исчезают после нажатия кнопки c # win форм - PullRequest
0 голосов
/ 29 апреля 2018

Я пытаюсь динамически загружать экземпляры пользовательских элементов управления в мою основную форму, и это работает по большей части, когда программа загружается, но не работает после соответствующей кнопки, чтобы загрузить этот пользовательский элемент управления, дважды нажатый.

Я использую следующий код для создания экземпляра пользовательских элементов управления

public partial class patientInfo : UserControl
{
    public static patientInfo _instance;
    public static patientInfo Instance
    {
        get
        {
            if (_instance == null)
                _instance = new patientInfo();
            return _instance;
        }
    }
}

и этот код для загрузки экземпляра в MainForm

 private void pInfo_Click(object sender, EventArgs e)
    {
        //Patient Info
        foreach (Control ctrl in panel3.Controls)
        {
            ctrl.Dispose();
        }
        if (!panel3.Controls.Contains(patientInfo.Instance))
        {
            panel3.Controls.Add(patientInfo.Instance);
            patientInfo.Instance.Dock = DockStyle.Fill;
            patientInfo.Instance.BringToFront();

        }
        else
        {
            patientInfo.Instance.BringToFront();

        }
    }

Если я нажму эту кнопку, как только пользовательский элемент управления загрузится так, как он должен, но я нажму ее снова, пользовательский элемент управления исчезнет. Я использую Dispose, потому что я хочу загрузить и выгрузить несколько пользовательских элементов управления на разных кнопках мыши. Пожалуйста, посоветуйте спасибо.

1 Ответ

0 голосов
/ 29 апреля 2018

Выполнение метода dispose объекта освобождает неуправляемые ресурсы, но не удаляет элемент управления из формы. В дополнение к удалению ресурса, когда вы закончили его использовать, вам нужно использовать метод remove элемента управления, чтобы удалить его из формы. Смотри С.О. ответ: Как программно удалить элементы управления формы

Также см. Пример Microsoft: Control.ControlCollection.Remove Method (Control) . Код из примера:

// Remove the RadioButton control if it exists.
private void removeButton_Click(object sender, System.EventArgs e)
{
   if(panel1.Controls.Contains(removeButton))
   {
      panel1.Controls.Remove(removeButton);
   }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...