如何检查表单上的空格是否有对象

时间:2014-12-23 22:21:09

标签: c# winforms mindmap

我正在开发思维导图项目。我试图获得" 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);
    }
}

2 个答案:

答案 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);