You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

从其他窗体调用主窗体resettimer方法无效,如何解决?

问题分析与解决方案

嘿,我一眼就发现问题出在哪了!你当前的代码根本没操作到正在运行的主窗体实例,自然触发不了想要的效果。

核心问题

你在btn_doorgaan_Click方法里新建了一个Bib_main的实例MainMenu:

Bib_main MainMenu = new Bib_main();

这个新创建的对象和你正在运行的主窗体完全是两个独立的实例,你调用的是这个全新对象的resettimer()方法,它根本不会影响到原来那个主窗体里的ShutdownTimer计时器。

两种可行的解决方案

方案1:传递主窗体引用给子窗体

这是最稳妥的方式,在打开子窗体时把主窗体的实例传递过去:

  1. 修改子窗体的构造函数,添加参数接收主窗体实例:
// 子窗体类中定义成员变量保存主窗体引用
private Bib_main _mainForm;

// 子窗体构造函数
public YourSubFormName(Bib_main mainForm)
{
    InitializeComponent();
    _mainForm = mainForm;
}
  1. 在主窗体中打开子窗体时,传入自身实例:
// 主窗体中打开子窗体的代码
YourSubFormName subForm = new YourSubFormName(this);
subForm.Show();
  1. 子窗体的按钮点击事件中调用主窗体的方法:
private void btn_doorgaan_Click(object sender, EventArgs e)
{
    _mainForm.resettimer();
}

方案2:通过Application.OpenForms获取已打开的主窗体

如果没办法提前传递引用,可以通过这个集合找到正在运行的主窗体实例:

private void btn_doorgaan_Click(object sender, EventArgs e)
{
    // 从已打开的窗体中查找Bib_main实例
    var mainForm = Application.OpenForms.OfType<Bib_main>().FirstOrDefault();
    if (mainForm != null)
    {
        mainForm.resettimer();
    }
}

注意:这种方式需要引用System.Linq命名空间,否则OfType和FirstOrDefault方法会报错。

内容的提问来源于stack exchange,提问作者Robin De Paepe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 03:35:11