【问题标题】:I'm trying to trigger an event on my main form, when a child form's child form gets closed当子表单的子表单关闭时,我试图在我的主表单上触发一个事件
【发布时间】:2021-09-01 06:48:24
【问题描述】:

通过我的主表单上的一个按钮,我打开了一个搜索表单。当我点击搜索表单上的按钮时,它会打开一个显示搜索结果的新表单。

当我点击“搜索结果”表单上的按钮时,我希望它在我的主表单中触发一个事件。

我试过下面的代码,但是没有用,基本上什么都没做。

主窗体:

public void mainBtnMenuSearch_Click(object sender, EventArgs e)
        {
            frmSearch frmSearch = new frmSearch();                    // My search form
            frmSearchList frmSearchList = new frmSearchList();        // My search results form
            frmSearchList.FormClosed += frmSearchTriggerEvent;        // Search results form closed

            frmSearch.Show();
        }


public void frmSearchTriggerEvent(object sender, FormClosedEventArgs e)
        {
            if (frmSearchList.isOpenedProject == true)
            {
                loadForm();               // Load another form into the panel in my Main form
            }
            else if (frmSearchList.isOpenedProject == false)
            {
                // ¯\_(ツ)_/¯
            }
        }


搜索表格:

public void searchByDate_Click(object sender, EventArgs e)
        {
            // some code for passing search results

            frmSearchList frmSearchList = new frmSearchList();        // My search results form
            frmSearchList.Show();

            this.Close();
        }

搜索结果表单:

public void openProjectByResult_Click(object sender, EventArgs e)
        {
            // some code for passing selected result's details

            this.Close();
        }

编辑 我已经检查过断点。 frmSearchTriggerEvent 没有被触发,frmSearchList.isOpenedProject 在触发之前变为真。

【问题讨论】:

  • 所以你是说frmSearchTriggerEvent 永远不会被触发?你有没有放一个断点来确定?
  • 也许,frmSearchList.isOpenedProject 是假的,这将导致无法观察到的行为。您是否使用断点验证 frmSearchTriggerEvent 未被调用?
  • @TheGeneral;是的,我已经设置了一个断点。 frmSearchTriggerEvent 未触发。 @SomeBody;我还检查了frmSearchList.isOpenedProject 是真的,我已经用断点验证了。
  • 问题解决了,我可能已经找到了原因。检查答案。
  • 但是.. 发布的代码似乎没有实现要求。你说“表格A打开表格B,表格B打开表格C,我希望表格C在表格C关闭时做一些事情” - 发布的代码附加了一个事件处理程序来表格B的关闭?

标签: c#


【解决方案1】:

我想我已经找到问题所在了。

在主表单和搜索表单中,我都将frmSearchList 声明为新表单,这意味着它被声明为新表单两次

我已经在全局类中声明了一次frmSearchList form(我也将其用于处理 SQL 查询的变量),并将 FormClosed 事件和 form.Show() 命令链接到该类。现在可以了。

【讨论】:

  • 一个全局类 - 听起来很可怕! ?
  • 它被声明为新形式两次 - 如果您将局部变量命名为 likeThis 并将类级别变量命名为 _likeThis,那么这种情况可能不会发生跨度>
  • @CaiusJard 实际上,我是 C# 新手,仍在通过反复试验学习。以后会注意的,谢谢指教。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-26
  • 1970-01-01
  • 1970-01-01
  • 2014-07-27
  • 1970-01-01
相关资源
最近更新 更多