C#:关闭子窗体时修改主窗体按钮背景图,用FormClosed还是FormClosing?
搞定你的按钮与子窗体联动需求,选FormClosed就对了
先直接给你答案:必须用FormClosed事件!为啥?FormClosing是窗体刚要启动关闭流程时触发,万一中间弹出个确认框用户点了取消,窗体没关上,这时候你改按钮图就尴尬了;而FormClosed是窗体实打实完全关闭后才触发,这时候改图才完全符合你“关闭子窗体时修改”的逻辑。
再看看你现有的代码,得调整一下才能实现需求,我给你一步步改:
第一步:给子窗体绑定关闭事件
你现在用ShowDialog()是模态窗口,会卡住主线程直到窗口关闭,但没关联关闭后的操作。所以在打开Cam窗口前,得给它加个FormClosed的事件处理:
private void CamBox1btn_Click(object sender, EventArgs e) { Camera Cam = new Camera(); // 关键:绑定子窗体关闭后的处理方法 Cam.FormClosed += Cam_FormClosed; if (bln) { CamBox1btn.Image = imageList1.Images[10]; Cam.ShowDialog(); // 模态窗口,会等窗口关了再往下走 } else { CamBox1btn.Image = imageList1.Images[8]; } bln = !bln; }
第二步:写关闭后的具体逻辑
新增一个方法,专门处理子窗体关闭时的按钮图片修改:
private void Cam_FormClosed(object sender, FormClosedEventArgs e) { // 这里改成你想要的关闭后显示的图片,比如切换回初始状态的图 CamBox1btn.Image = imageList1.Images[8]; // 如果需要同步bln的状态,也可以在这里调整,比如: // bln = false; }
额外唠两句
要是你硬要用FormClosing的话,还得判断是不是用户点了右上角的X(e.CloseReason == CloseReason.UserClosing),而且还要担心会不会有代码取消关闭(比如e.Cancel = true),反而徒增麻烦。所以FormClosed是最省心靠谱的选择。
要是你以后改成非模态窗口(用Show()),逻辑也是一样的,还是绑定FormClosed事件就行,只是记得管理好窗口实例别重复创建哦~
内容的提问来源于stack exchange,提问作者Pablo L
相关产品推荐
相关产品推荐

