我在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();
}
}
}
答案 0 :(得分:3)
WordToGuessControl正在设计器中创建,从而覆盖了我在代码中设置的设置。我删除了设计器中的设置并动态创建了控件。
感谢您的帮助:)
答案 1 :(得分:1)
您正在创建wordToGuessControl
,但没有代码将其添加到Parent的Controls集合中。也许GamePresenter()正在这样做,但我们看不到。
在WordToGuessControl
中,您要将新控件添加到父级,但您没有设置位置或大小,因此它们将全部叠加在一起。
答案 2 :(得分:1)
在第二个构造函数中,您忘记调用InitializeComponent();
答案 3 :(得分:0)
看起来你正在为你的WordToGuessControl添加RenderLetterControl控件,但你从来没有设置它的大小或位置,也没有调用Control.Show来使它可见。