我正在开发思维导图项目。我试图获得" New Bubble"按钮,以在表单上的免费空间中创建新文本框。所以我想检查一下它创建的地方是否还有另一个泡泡。如果它已经有一个文本框,那么我希望它找到一个新的地方并重复这个过程。
我该怎么做?
public partial class frmMap : Form
{
private void btnProperties_Click(object sender, EventArgs e)
{
new frmProperties().Show();
}
private void btnNewBubble_Click(object sender, EventArgs e)
{
var tb = new TextBox();
tb.Multiline = true;
tb.BorderStyle = BorderStyle.FixedSingle;
tb.Top = 100;
tb.Left = 200;
tb.Size = new Size(100, 100);
this.Controls.Add(tb);
}
}
答案 0 :(得分:1)
你可以检查"碰撞"与其他控件一样:
foreach (Control checkControl in Controls)
{
if (tb.Bounds.IntersectsWith(checkControl.Bounds))
...
}
当然,这需要做很多检查!如果你只是去" grid"在控件中,布局一个保持每个" cell"的状态的bool数组会更快/更容易。 (填充/清空)然后选择你找到的第一个空的。
答案 1 :(得分:1)
创建动态文本框:
var tb = new TextBox();
tb.Multiline = true;
tb.BorderStyle = BorderStyle.FixedSingle;
tb.Top = 100;
tb.Left = 200;
tb.Size = new Size(100, 100);
然后使用Rectangle.IntersectWith检查新文本框是否与其他已添加的texbox相交(如果要检查其他类型的控件,则可以删除控件类型过滤器):
while(Controls.OfType<TextBox>().Any(x => tb.Bounds.IntersectsWith(x.Bounds))
{
// adjust tb size or position here
}
最后一步 - 将文本框添加到表单中:
Controls.Add(tb);