2013-07-16 2 views
1

Я программно добавил несколько кнопок в C# Form, но только те, которые я добавил через Designer, действительно отображаются. Остальные остаются невидимыми, хотя. Перед этим я выполняю много операций; может ли это быть причиной?C# Button Visibility Issue

public FormView 
{ 
    List<Button> listOfButtons = new List<Button>(); 
    int frame = 0; 
    for (int i = 0; i < 36; i++) 
    { 
     listOfButtons.Add(new Button()); 
    } 
    listOfButtons[4 * frame].Width = 92; 
    listOfButtons[4 * frame].Height = 92; 
    listOfButtons[4 * frame].BackColor = Color.Red; 
    listOfButtons[4 * frame].BackgroundImage = System.Drawing.Image.FromFile("image.png"); 
    listOfButtons[4 * frame].BackgroundImageLayout = ImageLayout.Stretch; 
    listOfButtons[4 * frame].ImageAlign = ContentAlignment.MiddleCenter; 
    listOfButtons[4 * frame].TextAlign = ContentAlignment.TopCenter; 
    listOfButtons[4 * frame].Location = new Point(1, 0); 
    listOfButtons[4 * frame].Click += new EventHandler(this.button1_Click); 

    listOfButtons[4 * frame + 1].Width = 92; 
    listOfButtons[4 * frame + 1].Height = 92; 
    listOfButtons[4 * frame + 1].BackColor = Color.Red; 
    listOfButtons[4 * frame + 1].BackgroundImage = System.Drawing.Image.FromFile("image.png"); 
    listOfButtons[4 * frame + 1].BackgroundImageLayout = ImageLayout.Stretch; 
    listOfButtons[4 * frame + 1].ImageAlign = ContentAlignment.MiddleCenter; 
    listOfButtons[4 * frame + 1].TextAlign = ContentAlignment.TopCenter; 
    listOfButtons[4 * frame + 1].Location = new Point(1, 99); 
    listOfButtons[4 * frame + 1].Click += new EventHandler(this.button2_Click); 

    listOfButtons[4 * frame + 2].Width = 92; 
    listOfButtons[4 * frame + 2].Height = 92; 
    listOfButtons[4 * frame + 2].BackColor = Color.Red; 
    listOfButtons[4 * frame + 2].BackgroundImage = System.Drawing.Image.FromFile("image.png"); 
    listOfButtons[4 * frame + 2].BackgroundImageLayout = ImageLayout.Stretch; 
    listOfButtons[4 * frame + 2].ImageAlign = ContentAlignment.MiddleCenter; 
    listOfButtons[4 * frame + 2].TextAlign = ContentAlignment.TopCenter; 
    listOfButtons[4 * frame + 2].Location = new Point(99, 0); 
    listOfButtons[4 * frame + 2].Click += new EventHandler(this.button3_Click); 

    listOfButtons[4 * frame + 3].Width = 92; 
    listOfButtons[4 * frame + 3].Height = 92; 
    listOfButtons[4 * frame + 3].BackColor = Color.Red; 
    listOfButtons[4 * frame + 3].BackgroundImage = System.Drawing.Image.FromFile("image.png"); 
    listOfButtons[4 * frame + 3].BackgroundImageLayout = ImageLayout.Stretch; 
    listOfButtons[4 * frame + 3].ImageAlign = ContentAlignment.MiddleCenter; 
    listOfButtons[4 * frame + 3].TextAlign = ContentAlignment.TopCenter; 
    listOfButtons[4 * frame + 3].Location = new Point(99, 99); 
    listOfButtons[4 * frame + 3].Click += new EventHandler(this.button4_Click); 


    listOfButtons[4 * frame].Visible = true; 
    listOfButtons[4 * frame + 1].Visible = true; 
    listOfButtons[4 * frame + 2].Visible = true; 
    listOfButtons[4 * frame + 3].Visible = true; 
    InitializeComponent(); 
} 

Любые идеи?

+0

Вы видите ошибки в окне вывода? – PoweredByOrange

+0

Не знаете, почему это обозначено как ms-word ... Но вы хотите делать дополнительные действия ПОСЛЕ InitializeComponent ... Кроме того, похоже, что вы фактически не добавляете кнопки в какие-либо элементы управления? Если этот код просто не указан –

+0

@JustinPihony Он помечен как MS Word, потому что он предназначен для надстройки Word. Я подумал, что здесь будет хорошее место. Перемещение Visible = true после того, как компонент initalize ничего не сделал:/ И да, элементы управления не указаны. –

ответ

3

Я не вижу, чтобы вы добавляли кнопки в любой родительский элемент управления. Вы должны сделать что-то вроде этого:

Form1.Controls.Add(listOfButtons[4 * frame]); // and so on... 
+0

Yup, это сделал трюк. Большое спасибо!! –

+2

@JakeBloxham, пожалуйста, отметьте это как ответ, учитывая, что он исправил проблему. –

+1

Да, я собирался, но сайт сказал мне подождать пять минут, прежде чем смог:/ Решено! Опять же, спасибо вам столько Rwiti! –

1

Прежде всего сделайте все это после InitalizeComponent, когда элементы управления были инициализированы.

Затем добавьте элементы управления в какой-либо контейнер на вашей форме. например

 yourForm.Controls.Add(controlsToAdd); 

И если до сих пор вы не можете просматривать это может быть из-за нескольких причин, как ваши кнопки находятся за пределами формы или они накладываются друг на друга с другими элементами управления. Попробуйте назначить любую из кнопок, которые вы динамически добавляете в место фиксации в пределах формы.

0

Вы должны добавить элементы управления, не являющиеся дизайнером, в коллекцию Controls, либо одну из форм, либо другой элемент управления.