Ссылка на именованные элементы, созданные программно? - PullRequest
2 голосов
/ 27 сентября 2010

У меня есть RichTextBox, созданный программно со следующим кодом:

RichTextBox RT = new RichTextBox();
RT.Name = "asdf";
RT.Text = "blah";

TableLayoutPanel.Controls.Add(RT,0,0);

Теперь предположим, что я хочу изменить текст RT, и его имя «asdf», Visual Studio не позволит мне написать asdf.Text = "haha", потому что asdf еще не существует.

Как я могу специально взять «asdf» и установить его текст? Поскольку этот RichTextBox находится в определенной ячейке, могу ли я получить его на основе координат его ячейки?

Ответы [ 2 ]

2 голосов
/ 27 сентября 2010

Вы должны иметь возможность получить ссылку на него через свойство TableLayoutPanel.Controls, которое возвращает TableLayoutControlCollection .Этот класс предоставляет два способа поиска элемента управления по имени: свойство Item и метод Find .Свойство Item возвращает элемент управления с указанным именем, а метод Find возвращает коллекцию элементов управления.В обоих случаях вам необходимо привести от Control к RichTextBox.

var rt = (RichTextBox)myTableLayoutPanel.Controls.Item["asdf"];

// or

var rts = myTableLayoutPanel.Controls.Find("asdf", false);
foreach (var rt in rts)
    // (RichTextBox)rt ...

РЕДАКТИРОВАТЬ: перед использованием весли элемент управления не найден.

1 голос
/ 27 сентября 2010

Ну ... вы сделали , создали экземпляр RichTextBox и получили ссылку, которую вы можете использовать;в вашем примере он называется «RT».

Теперь, вероятно, вы сделали это в методе, поэтому он был локально ограничен и больше не доступен, когда вы этого хотите.Таким образом, вы сохраняете эту ссылку как-то, назначая ее какому-либо члену, к которому у вас есть доступ.Если у вас их много и вы хотите как-то различать по имени, вы можете, например, указать Dictionary<string, RichTextBox>.Или вы можете поместить его в какую-то статическую переменную;Есть множество вариантов, каждый со своими плюсами и минусами.

Единственное, что вы, вероятно, не хотите сделать, - это пройтись по дереву элементов управления в поисках элемента управления с указанным именем.Но вы также можете сделать это, если вы действительно этого хотите.

...