【问题标题】:Why doesn't all my controls show?为什么我的所有控件都没有显示?
【发布时间】:2014-02-09 13:10:08
【问题描述】:

我无法按我的意愿显示控件。我是一名初学者程序员,在表单方面非常如此,因此非常感谢任何帮助。

public void CreateCard(Card card)
{
    CardGUI topCard = new CardGUI(card);

    topCard.Location = new Point(50, 50);

    aPanel.Controls.Add(topCard);

    DrawPlacement(topCard);
}

public void DrawPlacement(CardGUI cardGui)
{
    cardGui.Location = new Point(a, b);

    a += 18; // Space the cards

    // Put the cards on a new line after half have been laid out.
    counter++;
    if (counter == 26)
    {
        a = 140;
        b = 130;
    }

    this.Update();
    aPanel.Controls.Add(cardGui);

    cardGui.BringToFront();
}

我的问题是我希望在CreateCard 中添加到面板的控件以及在DrawPlacement 中添加的控件都显示出来。但是CreateCard 中的控件没有按预期显示。如果我评论了对DrawPlacement 的调用,我确实会出现,所以我认为这与Location 属性有关?

我已经尝试了各种各样的东西,但到目前为止没有任何效果。

【问题讨论】:

  • 你在哪里定义a和b?
  • 它们是全局定义的。让我在开始新牌组时更容易重置它们(我想)。

标签: c# .net winforms controls


【解决方案1】:

您在DrawPlacement 中添加的CardGUI 类型的对象与在CreateCard 中添加的对象相同,因此添加它没有任何作用。

如果您想要在同一位置出现 2 次相同的对象,您应该创建另一个 CardGUI,它看起来与 DrawPlacement 中的第一个完全相同,而不是操作原始对象。

    public void CreateCard(Card card)
    {
        CardGUI topCard = new CardGUI(card);

        topCard.Location = new Point(50, 50);

        aPanel.Controls.Add(topCard);

        DrawPlacement(card);
    }

    public void DrawPlacement(Card card)
    {
        CardGUI cardGui = new CardGUI(card);
        cardGui.Location = new Point(a, b);

        a += 18; // Space the cards

        // Put the cards on a new line after half have been laid out.
        counter++;
        if (counter == 26)
        {
            a = 140;
            b = 130;
        }

        this.Update();
        aPanel.Controls.Add(cardGui);

        cardGui.BringToFront();
    }

【讨论】:

  • 没有卡应该在同一个位置。第一张卡片应代表牌组,并应在 CreateCard 中位于面板左侧的位置。然后,虽然还没有正确合并,但应该从牌堆中抽出牌并放在牌堆的右侧,一张一张地放置一个偏移量(a += 18),直到牌堆为空。最后一部分正在工作,它显示了不起作用的“甲板”。但是我现在已经有了你给我的改变的地方,我想我现在可以让它工作了,谢谢:)
  • 我们在这里遗漏了一些代码,您应该更多地展示您所做的事情或更好地解释您的问题。原始问题中的CreateCard 方法创建 one 卡片对象并将其放置在aPanel 下的某个位置,并且没有代码可以构建甲板或将任何东西放在a,b 以外的其他位置(该部分你在哪里设置50,50是没用的,因为它稍后被替换)
  • 你已经帮我解决了我目前的问题。但是放置在 (50,50) 处的第一个控件代表套牌,只需要查看最上面的卡。这是我看不到的,现在我可以通过您的更改。我在那里只需要一个控件,所以虽然我不确定它是否有效,但在添加之前我还添加了一个 aPanel.Controls.Remove(topCard)。至少它没有给出错误。所以是的,在我的原始代码中 50,50 没用,这就是我看不到控件的原因。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多