Есть следующий код:
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, надпись на кнопке не меняется Где я ошибся?
6 июня 2009 в 8:03
спасибо! получилось
5 июня 2009 в 18:02
При создании тип проекта выбран неправильно. Чтобы поменять, в MSVS 2008: Project->Project Properties->Application->Output type->Windows Application. Или пересоздать проект.
Вообще, правильный ответ RTFM
5 июня 2009 в 12:04
А как сделать, чтобы при запуске программы не появлялась консоль?
4 июня 2009 в 20:04
Спасибо за помощь!
4 июня 2009 в 12:00
Потому что Init вызывается два раза (один раз в конструкторе, второй раз в StartNewGame(), а она в свою очередь вызывается тоже из конструктора). Во второй раз Init() создает еще один набор кнопок, и замещает ими кнопки в массиве. Но новые элементы управления закрываются старыми элементами, то есть изменения текста на новом элементе не видно. Короче, убери Init() из StartNewGame().