Winforms Control Placeholder - PullRequest
       0

Winforms Control Placeholder

4 голосов
/ 29 января 2011

Я пытаюсь добавить System.Windows.Forms.Control в заданную коллекцию элементов управления формами.Я делаю это путем создания частного поля управления типами, а затем создания экземпляра этого поля для нового экземпляра System.Windows.Forms.Control в конструкторе.

Во время выполнения я пытаюсь изменить тип переменной _placeholder на TextBox, делая что-то подобное в следующем примере кода.Поэтому в основном я пытаюсь создать заполнитель типа Control и изменить его на другой элемент управления, например TextBox или Label, во время выполнения.Моя проблема в том, что ничего не отображается в моей форме?Любое понимание будет оценено.

public class MyForm : Form
{
  System.Windows.Forms.Control _placeholder = null;

  public MyForm()
  {
    _placeholder = new System.Windows.Forms.Control();
    this.Controls.Add(_placeholder);

    ChangeToTextBox();
  }

  public void ChangeToTextBox()
  {
    _placeholder = new TextBox();
  }
}

Ответы [ 2 ]

5 голосов
/ 29 января 2011

Это не будет работать, как написано, потому что оригинальный заполнитель все еще является ссылкой, добавленной к элементам управления.Вы можете исправить это, выполнив:

public void ChangeToTextBox()
{
  this.Controls.Remove(_placeholder); // Remove old
  _placeholder = new TextBox();
  this.Controls.Add(_placeholder); // Add new
}

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

1 голос
/ 29 января 2011

Это не работает, потому что в коллекцию Controls добавлен экземпляр System.Windows.Forms.Control, который вы добавили в конструктор.Затем вы изменяете объект, на который _placeholder указывает на элемент управления textbox, но никогда не добавляете это текстовое поле в коллекцию Controls формы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...