2013-04-07 2 views
1

Существует класс NodeButton, и эти NodeButton создаются динамически, а затем добавляются в Parent Control, который является Panel. В NodeButton внутренний номер TextBox и отображается верно на NodeButton. Проблема в том, что мне нужно создать другую внутри TextBox, которая должна быть расположена с правой стороны от NodeButton. Поскольку Button может быть Moved, TextBox должен двигаться так же, как и первый. Теперь новый TextBox не отображается, так как он находится за пределами границ Button. Возможно ли это без создания Wrapper управления для кнопки и TextBox, класс NodeButton слишком сложно ..Как показать один элемент управления рядом с другим элементом управления динамически?

+------+ +-------+ 
|Button| |TextBox| 
+------+ +-------+ 

public class NodeButton : Button 
{ 
    ... 
    public NodeButton() 
    { 
    TextBox tb = new TextBox() 
    { 
     Name = ... 
     Location = New Point(2,2); 
     ... 
     Parent = this; 
    } 
    this.Controls.Add(tb);  

    .. 
    } 
    .. 
} 

ответ

2
this.Controls.Add(tb); 

Не добавлять текстовое поле в коллекцию Controls данной кнопки, добавьте его к родительским баттона , Грубо говоря:

tb.Location = new Point(this.Right + 5, this.Top); 
this.Parent.Controls.Add(tb); 

ли убедитесь, что родитель действительно, не ясно, что это может быть из контекста. Если нет, или вы не можете быть уверены, то лучше всего использовать OnParentChanged. Использование UserControl может быть целесообразным. Таким образом, не переполняет панели с элементами управления, которые, как правило, искажают ваш пользовательский интерфейс при сканировании.

+0

Это рисует «TextBox» по мере необходимости :), но когда я перетаскиваю «NodeButton», TextBox не перемещается. Должен ли я писать свой собственный код, чтобы переместить его с помощью 'NodeButton' в обработчики движущихся событий? Я не хочу этого делать, потому что мне нужно как минимум 3 текстовых поля и 3 метки вокруг этого 'NodeButton' –

+0

. Вам также необходимо переопределить OnLocationChanged(), чтобы вы могли также перемещать текстовое поле. Произвольное увеличение количества элементов управления делает UserControl явно превосходным. –

+0

Вау, 'OnLocationChanged()' помог. Спасибо! Я буду использовать 'UserControl' как базовый класс :) –