因此,对于编码项目,我需要创建一个奥赛罗游戏。现在我正在尝试自己完成大部分工作。基本上是想重新学习C#。我只是想创建一个板子。现在我使用文本框,B代表黑色,W代表白色。
我的问题是尝试创建我的电路板课程。
我的代码在这里:
private TextBox[,] textboxes;
public board()
{
textboxes = new TextBox[,] {
{textBox1,textBox2,textBox3,textBox4,textBox5,textBox6,textBox7,textBox8},
{textBox11,textBox12,textBox13,textBox14,textBox15,textBox16,textBox17,textBox18},
{textBox21,textBox22,textBox23,textBox24,textBox25,textBox26,textBox27,textBox28},
{textBox31,textBox32,textBox33,textBox34,textBox35,textBox36,textBox37,textBox38},
{textBox41,textBox42,textBox43,textBox44,textBox45,textBox46,textBox47,textBox48},
{textBox51,textBox52,textBox53,textBox54,textBox55,textBox56,textBox57,textBox58},
{textBox61,textBox62,textBox63,textBox64,textBox65,textBox66,textBox67,textBox68},
{textBox71,textBox72,textBox73,textBox74,textBox75,textBox76,textBox77,textBox78}};
}
这会创建一个8x8网格框。我在一个名为board的类中有这个。它不会让我在这里使用这些文本框。
我收到此错误:错误1无法通过嵌套类型“WindowsFormsApplication1.Form1.board”访问外部类型“WindowsFormsApplication1.Form1”的非静态成员
任何想法或想法如何使我更容易做到这一点?
答案 0 :(得分:1)
显然写出这样的文本框不是一个好的选择=)
选择是:
创建一个PictureBox
并处理其Paint
事件,并使用.NET强大的Graphics
对象进行绘制;你会得到非常酷的方法,例如DrawRectangle()
和DrawEllipse()
。示例摘录:
int GridHeight = 50, GridWidth = 50;
// draw the graph grid
for (int i = 0; i < 8; i++)
for (int j = 0; j < 8; j++)
g.DrawRectangle(Pens.Black, i * GridWidth, j * GridHeight, GridWidth, GridHeight);
通过这种方式,您可以轻松地在更高级别修改电路板的尺寸。
如果您必须使用可能更容易实现交互的文本框,则需要以相同的嵌套 - for
方式动态创建它们,尽管您创建了TextBox
在飞行中,例如:
for (int i = 0; i < 8; i++)
for (int j = 0; j < 8; j++)
{
TextBox cell = new TextBox();
cell.Top = i * GridHeight;
cell.Left = j * GridWidth;
cell.Click += new EventHandler(Cell_Click);
AllCells.Add(cell);
}
并相应地处理Cell_Click
事件。
答案 1 :(得分:1)
我不认为使用文本框是个好主意。但我缺乏这种经验。 所以....我只能给你一些程序性建议。
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
class Board
{
private TextBox[,] textboxes;
public Board(Form1 form)
{
textboxes = new TextBox[,]
{
{form.textBox1, form.textBox2, ....}
};
}
}
}