2009-11-01 74 views
3

我在c#中創建了一個winform,我在頁面和另一個控件上有3個控件,並以編程方式在其中一個原始控件上創建。這不是渲染,所以我改變了其他控件的背景顏色(它們都是明亮的顏色開始),當我運行應用程序時,變化沒有發生,我匆匆過去,看不到我是什麼做錯了。誰能幫忙?Winform not rendering control alterations

更新: *我已設置位置,大小和名稱,但它沒有區別。 *奇怪的是,當我把它放在沒有參數的構造函數中時,它工作正常。這似乎與第二個構造函數中的代碼有關(它確實在兩個構造函數中都運行了代碼)。

感謝薩拉:)

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(); 
    } 
} 
} 
+1

沒有任何代碼,幾乎不可能回答這個問題。請嘗試發佈一個簡短但完整的程序來演示問題。 – 2009-11-01 16:37:34

+0

我會迴應Jon的評論,但如果出現可怕的錯誤,可能需要嘗試清理解決方案(手動如果需要) – Lee 2009-11-01 16:48:38

+0

確保您的更改正在* .designer.cs文件中更新,而沒有任何代碼我們無法真正幫助你。 – 2009-11-01 16:55:56

回答

3

WordToGuessControl正在設計器中創建,因此覆蓋了我在代碼中設置的設置。我刪除了設計器中的設置並動態創建了控件。

感謝您的幫助:)

0

它看起來像要添加RenderLetterCont滾動控制到你的WordToGuessControl,但你從來沒有設置它的大小或位置,也沒有調用Control.Show使其可見。

1

您正在創建wordToGuessControl,但沒有將代碼添加到Parent的Controls集合中。也許GamePresenter()正在這樣做,但我們看不到。

WordToGuessControl您正在將新的控件添加到父級,但您未設置位置或大小,因此它們將全部堆疊在彼此之上。

1

在第二個構造函數中,你忘記調用InitializeComponent();

+0

我試過了,沒有運氣:(還有第一個構造函數被調用(this()) – Sara 2009-11-02 22:06:11

+0

哦,對不起,我沒有看到!:-( – 2009-11-03 07:20:45