Winform不呈现控件更改

时间:2009-11-01 16:34:16

标签: c# winforms user-controls

我在c#中创建了一个winform,我在页面上有3个控件和另一个控件,并在其中一个原始控件上以编程方式创建。它不是渲染,所以我改变了其他控件的背景颜色(它们都是明亮的颜色开始),当我运行应用程序时,没有发生变化,我已经穿过,看不到我是什么做错了。有人可以帮忙吗?

更新: *我已经设定了位置,大小和名称,但没有任何区别。 *奇怪的是当我把它放在没有参数的构造函数中时它工作正常。它似乎与第二个构造函数中的代码有关(它实际上在两个构造函数中运行代码都很好)。

谢谢萨拉:)

GameForm.cs

namespace Hangman
{
public partial class GameForm : Form, IGameView
{
    public GameForm()
    {
        InitializeComponent();
    }

    public GameForm(Game game) : this()
    {
        wordToGuessControl = new WordToGuessControl(game.Level);
        new GamePresenter(this, wordToGuessControl, hangmanControl);
    }
}

WordToGuessControl.cs

namespace Hangman.UserControls
{
    public partial class WordToGuessControl : UserControl, IWordToGuessView
    {

    private string _word;
    public WordToGuessControl()
    {
        InitializeComponent();
    }

    public WordToGuessControl(Level level) : this()
    {
        _word = GenerateWord(level);

        foreach (var character in _word)
        {
            var characterInWord = new RenderLetterControl();
            characterInWord.Location = new Point(0, 0);
            characterInWord.Name = character.ToString();
            characterInWord.Size = new Size(50,50);

            characterInWord.Text = "_";
            Controls.Add(characterInWord);

        } 
    }

    private string GenerateWord(Level level)
    {
        return new WordGenerator().GenerateWord(level);
    }
}

RenderLetterControl.cs

namespace Hangman.UserControls
{
public partial class RenderLetterControl : Label
{
    public RenderLetterControl()
    {
     InitializeComponent();
     Text = "_";
    }

    public RenderLetterControl(char character): this()
    {
        string characterGuessed = character.ToString();
    }
}
}

4 个答案:

答案 0 :(得分:3)

WordToGuessControl正在设计器中创建,从而覆盖了我在代码中设置的设置。我删除了设计器中的设置并动态创建了控件。

感谢您的帮助:)

答案 1 :(得分:1)

您正在创建wordToGuessControl,但没有代码将其添加到Parent的Controls集合中。也许GamePresenter()正在这样做,但我们看不到。

WordToGuessControl中,您要将新控件添加到父级,但您没有设置位置或大小,因此它们将全部叠加在一起。

答案 2 :(得分:1)

在第二个构造函数中,您忘记调用InitializeComponent();

答案 3 :(得分:0)

看起来你正在为你的WordToGuessControl添加RenderLetterControl控件,但你从来没有设置它的大小或位置,也没有调用Control.Show来使它可见。