将许多按钮添加到 splitContainer (winforms)

Posted

技术标签:

【中文标题】将许多按钮添加到 splitContainer (winforms)【英文标题】:Adding many buttons to a splitContainer (winforms) 【发布时间】:2014-05-08 23:56:35 【问题描述】:

我正在寻找答案,但找不到任何东西,所以:

我正在做一个简单的项目,但我有一个问题:

// fragment of code in parent form
Random r = new Random();
private void BeginGame()
    
        SetName();
        sheep = new Sheep[howManySheep];
        for (int i = 0; i < howManySheep; i++)
            sheep[i] = new Sheep(this);
        (...)
    

public Sheep DrawSheep
    
        set
        
            splitContainer1.Panel2.Controls.Add(value);
        
    
// fragment of code in child form
 class Sheep : Button
 public Sheep(Form1 _parent)
        : base()
    
        var p = new Point(r.Next(_parent.PanelSize[0]), r.Next(_parent.PanelSize[1]));
        Text = null;
        Size = new Size(size, size);
        BackColor = Color.White;
        Tag = nrSheep++;
        Location = p;
        _parent.DrawSheep = this;
        MessageBox.Show(this.Location.ToString());
    

虽然 MessageBox.Show(..) 被评论,但它只画了一只羊(我的意思是所有羊,但在同一个地方) 当 MessageBox.Show(..) 未注释时,它绘制的一切都很好,它应该是怎样的。 我的问题是怎么做?

【问题讨论】:

使用调试器,卢克! 听起来是 Random 的问题。当你改为public static Random r 时它会消失吗? 是的,你是对的,谢谢。使字段随机静态解决了我的问题。但是我仍然不知道为什么显示消息会干扰这个过程 当您连续快速创建新实例而不是保留 Random 的单个静态实例时,最常出现问题。这可能发生得如此之快,以至于它们获得相同的默认种子,从当前时间派生,因此将创建相同的数字序列。 MessageBox 让很多时间过去了,所以问题似乎解决了,但实际上只是隐藏了..通常只需要一个 Random 生成器,这需要将其设为静态。另一种隐藏它的方法是使用调试器;-) @TaW 将您的评论变成答案——它应该被接受。 【参考方案1】:

这听起来像是Random 的一个相当普遍的问题。当您将其设为类级别变量时,它通常会消失:

public static Random r = new Random();

通常只需要一个Random 生成器,这需要使其成为静态的。

但是为什么MessageBox 有帮助呢?

当您连续快速创建新实例而不是保留Random 的单个静态实例时,最常出现问题。这可能发生得如此之快,以至于它们获得相同的默认种子,从当前时间派生,因此将创建相同的数字序列。

现在,显示MessageBox 让在创建新的Random 实例之间有很多时间过去,所以问题似乎已经解决了,但实际上只是隐藏..

隐藏这个(和其他时间相关问题)的另一种更狡猾的方法是使用调试器 - 但不要让它阻止你使用它;-)

【讨论】:

以上是关于将许多按钮添加到 splitContainer (winforms)的主要内容,如果未能解决你的问题,请参考以下文章

C# WinForm splitContainer 问题

c#中关于splitContainer控件的用法:如何做到不清除控件就能在panel2中打开一个窗体呢?

将许多单选按钮添加到 groupbox C#

如何使 SplitContainers 中的 ListBoxes 正确调整大小?

winform中的SplitContainer控件问题

SplitContainer 面板调整大小问题