遇到了个问题,想通过用户自定义是生成扫雷界面,Form2为自定义扫雷行数和列数窗口,窗口中有确定按钮,我在Form2中设置了一个bool isSure变量判断用户是否点击确定按钮,还设置了hang变量获取用户自定义输入的扫雷界面行数,Form1为主窗口,Form1中设置LeiBtn类中的x变量表示界面行数。现在的问题是在自定义窗口中设置完行数和列数后,主窗口雷区的界面不刷新,仍为初始状态。请大神们帮着看看怎么办呀!!
代码如下:
Form2.cs:
private void Button1_Click(object sender, EventArgs e)
{
isSure=true;
Form1 f = new Form1();
f.Defined();// Defined函数为显示雷区函数
this.Close();
}Form1.cs:
public void Defined()
{
if (Form2.isSure == true)
{
MessageBox.Show("条件1");
LeiBtn.x = Form2.hang;
LeiBtn.y = Form2.row;
DisplayMine();
foreach (Control obj0 in this.Controls)
{
this.Controls.Clear();
}
}
else
{
MessageBox.Show("初始状态");
LeiBtn.x = 10;//雷区初始状态行数为10
LeiBtn.y = 10;//雷区初始状态列数为10
DisplayMine();
} } public void DisplayMine()
{
for (int i = 0; i < LeiBtn.x; i++)
{
for (int j = 0; j < LeiBtn.y; j++)
{
LeiBtn btn = new LeiBtn();
btn.Size = new Size(25, 25);
btn.Location = new Point(20 + i * 25, 80 + j * 25);
this.Controls.Add(btn);
}
} }
private void Form1_Load(object sender, EventArgs e)
{
Defined();
}
代码如下:
Form2.cs:
private void Button1_Click(object sender, EventArgs e)
{
isSure=true;
Form1 f = new Form1();
f.Defined();// Defined函数为显示雷区函数
this.Close();
}Form1.cs:
public void Defined()
{
if (Form2.isSure == true)
{
MessageBox.Show("条件1");
LeiBtn.x = Form2.hang;
LeiBtn.y = Form2.row;
DisplayMine();
foreach (Control obj0 in this.Controls)
{
this.Controls.Clear();
}
}
else
{
MessageBox.Show("初始状态");
LeiBtn.x = 10;//雷区初始状态行数为10
LeiBtn.y = 10;//雷区初始状态列数为10
DisplayMine();
} } public void DisplayMine()
{
for (int i = 0; i < LeiBtn.x; i++)
{
for (int j = 0; j < LeiBtn.y; j++)
{
LeiBtn btn = new LeiBtn();
btn.Size = new Size(25, 25);
btn.Location = new Point(20 + i * 25, 80 + j * 25);
this.Controls.Add(btn);
}
} }
private void Form1_Load(object sender, EventArgs e)
{
Defined();
}
解决方案 »
- .NET牛人测试题目?[转]
- 请教关于API的使用方式
- C#如何获取系统服务的开启状态,高手进
- 关于C#编程的基础,我们应该怎样对待它呢?
- XML嵌入资源问题 在线等待!高分求教!!!
- 如何让触发一个事件让另一个事件也得到触发
- 无法将类型为“System.TimeSpan”的对象强制转换为类型“System.IConvertible”
- 求高手帮助,看个程序,不知道为什么错误??
- c#写的图像程序保存的图像文件,文件内容中有一部分是png格式,怎样让自己定义的文件大图标显示png那部分的图片?
- 怎样在几个项目之间来回调试,在一个Solution中?
- winform 父窗体弹出若干子窗体,请问怎么在子窗体中关闭它自己,而不影响父窗体
- 新手请教,如果从qq邮箱的服务器里获取一定数量的邮件的时候,耗时过长应该如何解决
{
for (int i = 0; i < LeiBtn.x; i++)
{
for (int j = 0; j < LeiBtn.y; j++)
{
LeiBtn btn = new LeiBtn();
btn.Size = new Size(25, 25);
btn.Location = new Point(20 + i * 25, 80 + j * 25);
this.Controls.Add(btn);
}
}
是生成扫雷界面的, LeiBtn.x,LeiBtn.y应该是你定义的行和列,你应该先清除雷区的btn,再DisplayMine(),别外再在者说封装,你要传递函数,不要总用公用变量,他是可以被其他操作改变的
{
this.Controls.Clear();
}
遍历每个空间,进行删除,在执行DisplayMine()
代码如下: if (Form2.isSure == true)
{
MessageBox.Show("进入刷新扫雷界面");
LeiBtn.x = Form2.hang;
LeiBtn.y = Form2.row;
foreach (Control obj0 in this.Controls)
{
this.Controls.Clear();
}
DisplayMine();
}
else
{
MessageBox.Show("初始状态");
LeiBtn.x = 10;
LeiBtn.y = 10;
DisplayMine();
}
但界面不刷新,刚学习编程没多久,小白一个,麻烦你在帮着看一下,谢谢
但是Form2里的Form1是新建的局部变量,跟作为主窗口的Form1没有任何关系所以是无效的。