singlepost

Помогите пожалуйста с Winforms в C# << На главную или назад  

Есть следующий код:

using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Forms;
using System.Drawing;
namespace Project3
{
public class GameForm : Form
{
public static void Main()
{
GameForm newGameForm = new GameForm();
}
private static int s_ButtonSize = 30;
private Button[] m_ColumnButtons;
private Button[,] m_GameButtons;
public GameForm()
{
Init();
StartNewGame();
}
public void Init()
{
this.Text = "4 in Line Game";
this.FormBorderStyle = FormBorderStyle.Fixed3D;
this.Size = new Size(500, 500);
this.StartPosition = FormStartPosition.CenterScreen;
//initiate power buttons
m_ColumnButtons = new Button[3];
for (int i = 0; i < 3; i++)
{
m_ColumnButtons[i] = new Button();
m_ColumnButtons[i].Size = new Size(s_ButtonSize, s_ButtonSize);
m_ColumnButtons[i].Location = new Point(i * s_ButtonSize, 0);
m_ColumnButtons[i].Text = i.ToString();
m_ColumnButtons[i].Click += new EventHandler(NewTurn);
this.Controls.Add(m_ColumnButtons[i]);
}
m_GameButtons = new Button[3, 3];
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 3; j++)
{
m_GameButtons[i, j] = new Button();
m_GameButtons[i, j].Size = new Size(s_ButtonSize, s_ButtonSize);
m_GameButtons[i, j].Location = new Point(i * s_ButtonSize, s_ButtonSize + (j * s_ButtonSize));
m_GameButtons[i, j].Enabled = false;
this.Controls.Add(m_GameButtons[i, j]);
}
}
}
public void MakeEmptyTable()
{
//enable power buttons
for (int i = 0; i < 3; i++)
{
m_ColumnButtons[i].Enabled = true;
}
//clear game form and matrix
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 3; j++)
{
m_GameButtons[i, j].Text = " ";
}
}
}
public void StartNewGame()
{
MakeEmptyTable();
Init();
this.ShowDialog();
}
private void NewTurn(object sender, EventArgs e)
{
m_GameButtons[1, 1].Text = "O";
}
}
}

Почему-то хотя программа заходит в NewTurn, надпись на кнопке не меняется :( Где я ошибся?

5 ответов в теме “Помогите пожалуйста с Winforms в C#”

  1. 5
    Илья Штеренберг ответил:

    спасибо! получилось

  2. 4
    Александр Lert ответил:

    При создании тип проекта выбран неправильно. Чтобы поменять, в MSVS 2008: Project->Project Properties->Application->Output type->Windows Application. Или пересоздать проект.
    Вообще, правильный ответ RTFM

  3. 3
    Илья Штеренберг ответил:

    А как сделать, чтобы при запуске программы не появлялась консоль?

  4. 2
    Илья Штеренберг ответил:

    Спасибо за помощь!

  5. 1
    Александр Lert ответил:

    Потому что Init вызывается два раза (один раз в конструкторе, второй раз в StartNewGame(), а она в свою очередь вызывается тоже из конструктора). Во второй раз Init() создает еще один набор кнопок, и замещает ими кнопки в массиве. Но новые элементы управления закрываются старыми элементами, то есть изменения текста на новом элементе не видно. Короче, убери Init() из StartNewGame().

Клуб программистов работает уже ой-ой-ой сколько, а если поточнее, то с 2007 года.