求助,C#扫雷自定义行数和列数无法刷新雷区界面怎么办

不知道起什么名的郭郭 2019-06-11 04:34:14
遇到了个问题,想通过用户自定义是生成扫雷界面,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();
}
...全文
154 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
我按照你提供的思路进行了重新改进,在Form2.cs中将自定义获取的行数和列数赋值给了LeiBtn.x,LeiBtn.y。然后我使用foreach (Control obj0 in this.Controls) { 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(); } 但界面不刷新,刚学习编程没多久,小白一个,麻烦你在帮着看一下,谢谢
hsh123698745 2019-06-12
  • 打赏
  • 举报
回复
按我的理解Form1是主窗口,Form2是设置窗口,在Form1上按设置弹出Form2,Form2修改关闭回到Form1,Form1的界面改变。是要这样的效果对吧。
但是Form2里的Form1是新建的局部变量,跟作为主窗口的Form1没有任何关系所以是无效的。
jx315425246 2019-06-12
  • 打赏
  • 举报
回复
跟踪displaymine
jx315425246 2019-06-12
  • 打赏
  • 举报
回复
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);
}
}
是生成扫雷界面的, LeiBtn.x,LeiBtn.y应该是你定义的行和列,你应该先清除雷区的btn,再DisplayMine(),别外再在者说封装,你要传递函数,不要总用公用变量,他是可以被其他操作改变的

110,546

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧