如何动态地在另一个控件旁边显示一个控件

本文关键字:控件 显示 一个 何动态 动态 另一个 | 更新日期: 2023-09-27 18:07:45

有一个类NodeButton,这些NodeButton是动态创建的,然后添加到Parent Control中,即Panel。在NodeButton中创建了一个内部TextBox,它在NodeButton上正确显示。问题是我需要在TextBox内创建另一个,它应该位于NodeButton的右侧。由于Button可以是Moved, TextBox应该像第一个一样移动。现在新的TextBox是不可见的,因为它在Button的边界之外。如果不为按钮和文本框创建包装器控件,这是可能的吗? 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);    
  ..
  }
  ..
}

如何动态地在另一个控件旁边显示一个控件

this.Controls.Add(tb); 

不要将文本框添加到按钮的Controls集合中,而是将其添加到按钮的Parent集合中。约:

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

确保Parent是有效的,不清楚它是否来自上下文。如果没有,或者你不能确定,那么重写OnParentChanged是最好的。使用UserControl是明智的。所以不要在面板中塞满控件,这会让你的UI变得很缓慢。