C# Winform不呈现控件更改

C# Winform不呈现控件更改,c#,winforms,user-controls,C#,Winforms,User Controls,我在c#中创建了一个winform,我在页面上有3个控件和另一个控件,并且是在一个原始控件上以编程方式创建的。它没有渲染,所以我更改了其他控件的背景颜色(它们都是明亮的颜色),当我运行应用程序时,这些更改没有发生,我已经逐步完成,看不出我做错了什么。有人能帮忙吗 更新: *我已经设置了位置、大小和名称,但没有任何区别。 *奇怪的是,当我把它放在没有参数的构造函数中时,它工作得很好。这似乎与第二个构造函数中的代码有关(它实际上在两个构造函数中都运行代码) 谢谢莎拉:) GameForm.cs na

我在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);
    }
}
wordtoguescontrol.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);
    }
}
namespace Hangman.UserControls
{
public partial class RenderLetterControl : Label
{
    public RenderLetterControl()
    {
     InitializeComponent();
     Text = "_";
    }

    public RenderLetterControl(char character): this()
    {
        string characterGuessed = character.ToString();
    }
}
}
RenderLetterControl.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);
    }
}
namespace Hangman.UserControls
{
public partial class RenderLetterControl : Label
{
    public RenderLetterControl()
    {
     InitializeComponent();
     Text = "_";
    }

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

看起来您正在向WordTogueSControl添加RenderLetterControl控件,但您从未设置其大小或位置,也没有调用Control.Show使其可见。

您正在创建一个
WordTogueSControl
,但没有代码将其添加到父控件集合。也许GamePresenter()正在这样做,但我们看不到


wordtoguescontrol
中,您正在将新控件添加到父控件中,但您没有设置位置或大小,因此它们将堆叠在一起。

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

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


感谢您的帮助:)

如果没有任何代码,很难回答这个问题。请尝试发布一个简短但完整的程序来演示问题。我将回应Jon的评论,但如果出现严重错误,可能值得尝试清理解决方案(如果需要,请手动清理)。确保在*.designer.cs文件中更新您的更改,而没有任何代码,我们无法真正帮助您。好的,我会尝试编写一些代码,因为我是第一次做MVP,所以我有点困惑-对不起,为什么在public wordtoguescontrol(Level-Level):this()的末尾有一个InitializeComponent()调用?这很糟糕。this()调用将调用InitializeComponent();无需再次调用它(因为它将重置所有内容)。这可能解决不了你的问题,但我突然想到了。我试过了,运气不好:(而且第一个构造函数被称为(this())哦,对不起,我没有看到!)-(