2013-03-04 3 views
1

Я запутался с элементом управления RichTextBox.Почему я не могу создать RichTextBox из ссылки RichTextBox

У меня есть управление WinForm с шириной 100 пикселей. Я хочу создать один динамически, а затем ссылку на экземпляр.

Таким образом, если предположить на моем Form у меня RichTextBox называется rtbResult я бы подумал, что я могу сделать следующее:

RichTextBox rtb = new RichTextBox(); 
    rtb.Text = "Hello all"; 
    rtb.Width = 50; 
    rtbResult = rtb; 

Когда код выполняется, то результат пустой RichTextBox на моей странице, на первоначальный размер 100 пикселей (например, не ширина 50).

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

Любые идеи, что я делаю неправильно?

ответ

4

То, что вы сделали не так уж отличается от этого:

RichTextBox r1 = new RichTextBox(); 
r1.Text = "I am RTB #1"; 
Controls.Add(r1); 

RichTextBox r2 = new RichTextBox(); 
r2.Text = "I am RTB #2"; 

Теперь на вашей странице у вас есть RichTextBox именем r1. Если вы сделаете это:

r1 = r2; 

Вы не замещают контроль в форме с новым RichTextBox, вы просто присвоить ту же ссылку на переменную r1. В вашей форме у вас все еще есть старый, но обе переменные (r1 и r2) указывают на тот же объект.

Что вы можете сделать, если вы не можете просто обновить исходный RichTextBox с новыми значениями, чтобы удалить старый и добавить новый в том же положении:

r2.Bounds = r1.Bounds; 
Controls.Remove(r1); 
Controls.Add(r2); 

Это довольно наименее, многие свойства могут быть скопированы из старого в новый (Dock, TabIndex и т. д.), причем заказ тоже важен, поэтому вам может потребоваться позвонить Controls.SetChildIndex() для правильного позиционирования (это зависит от того, что вы действительно имеете делать и как ваш код).

+0

Спасибо Адриано. Отлично. – Dave

2

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

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

somePanel.Controls.Add(rtb); 
+0

Благодарим за помощь. Это очень ясно. – Dave

Смежные вопросы