【问题标题】:C# create panels only in one big panelC#只在一个大面板中创建面板
【发布时间】:2021-06-06 16:31:01
【问题描述】:

C# 只在一个大面板中创建面板 我有这个代码(盒子大小是随机生成的):

//Set Location of panel
int xbox = r.Next(10, 766);
int ybox = r.Next(10, 390);
if(ybox + box.Height >= boxPanel.Location.Y + boxPanel.Height)
{
    ybox = ybox - 100;
}
else if(xbox + box.Width >= boxPanel.Location.X + boxPanel.Width)
{
    xbox = xbox - 100;
}
else if(xbox - box.Width <= boxPanel.Location.X - boxPanel.Width)
{
    xbox = xbox + 100;
}
else if (ybox - box.Height <= boxPanel.Location.Y - boxPanel.Height)
{
    ybox = ybox + 100;
}
box.Location = new Point(xbox, ybox);

我最终想要的是一个盒子或多个盒子,它们在面板中而不在外面。我想在生成面板时看到它。我还想保留一个“不可见”的边框,这样它就不会在边缘产生。

【问题讨论】:

  • 您的问题到底是什么?无论如何,您可能需要考虑使用FlowLayoutPanel
  • 您可能正在尝试将您的 box 面板添加到父 boxPanel。所以,你错过了boxPanel.Controls.Add(box)。定义子面板的位置时,根本不考虑容器的位置。 -- 如果您只想要随机大小并且子控件的位置不相关,请使用前面提到的 FlowLayoutPanel。否则,只需随机定义它们的位置/大小并将它们添加到容器中。 BringToFront() 可用于在顶部显示添加的最后一个子控件。

标签: c# winforms panel


【解决方案1】:

您不应该在这些陈述中使用else;它们都应该是单独的 if 语句。如前所述,如果第一个 y 检查触发,则不会运行其他任何块/检查。

为什么不首先在正确的范围内随机生成 xy 值?

例如:

// assumes "box" was already created with a desired width/height
int xbox = r.Next(10, boxPanel.Width - box.Width - 10);
int ybox = r.Next(10, boxPanel.Height - box.Height - 10);
box.Location = new Point(xbox, ybox);
boxPanel.Controls.Add(box);

这将使框保持在另一个面板中,边缘周围有 10 像素的“边距”。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-02-26
    • 2011-10-17
    • 1970-01-01
    • 2019-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多