【问题标题】:Form1_Load not firing even after adding handler即使在添加处理程序后 Form1_Load 也不会触发
【发布时间】:2011-07-09 00:50:52
【问题描述】:

自从我涉足 C# 以来已经有很长一段时间了,但我有一段时间让我的 form_load 开火了。这是最简单的事情,我无法想象为什么它不会火!任何帮助将不胜感激。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace AppName_v4._0___TestRoom_Addon{
    public partial class Form1 : Form{

        public Form1() {
            InitializeComponent();
            this.Load += new EventHandler(this.Form1_Load); //FIRES!
        }

        private void Form1_Load(object sender, EventArgs e) {
            webKitBrowser1.Dock = DockStyle.Fill; //DOES NOT FIRE!
            webKitBrowser1.Navigate("http://192.168.0.10/?zoneid=11");
        }
    }
}

更新

  • 我已经使用断点来验证该行没有被命中
  • 表格确实显示

我也尝试了以下方法,但没有成功:

namespace AlphaEntry_v4._0___MailRoom_Addon{
    public partial class Form1 : Form{

        public Form1() {
            InitializeComponent();

        }

        protected override void OnLoad(EventArgs e)
        {
            webKitBrowser1.Dock = DockStyle.Fill;
            webKitBrowser1.Navigate("http://192.168.0.10/?zoneid=11");

            base.OnLoad(e);
        }
    }
}

更新 #2 我能够通过删除和重新添加对 WebKit 控件的引用来完成这项工作。不知道发生了什么。谢谢大家。

【问题讨论】:

  • 您是否阅读过输出窗口中的信息?
  • @Beaner: 是的,我看到了错误,但是即使没有 webKitBrowser1.* 代码也不会调用该函数
  • @Beaner: 更正:这些是旧错误,现在我已经清除了输出窗口,因此不会出现。还是没有Form1_Load()
  • (1) 如果您从表单中删除 WebKitBrowser1,它是否有效? (2) 使用 HandleExceptionsAsThrown 运行是否显示吞下任何奇怪的异常?
  • B*的儿子!@#。从表单中删除控件解决了这个问题。我不知道为什么会这样。我正在使用WebKit.NETwebkitdotnet.sourceforge.net

标签: c# winforms event-handling form-load


【解决方案1】:

这是我能想象到的最简单的事情为什么它不会触发!

我怀疑问题不在于它“没有触发”,而是有问题的代码没有按照您怀疑的方式处理事情。

尝试在“*.Dock”行设置断点。鉴于上面的代码,一旦您显示此表单,它就应该被点击。但是,由于它是一个 Form.Load 事件,因此在通过 form.Show() 实际显示表单实例之前不会发生这种情况。

【讨论】:

  • 我应该指定的,但我使用断点来确定代码永远不会被命中,这是理所当然的。这是项目中唯一的表单,也是启动对象。您在此处看到的代码是迄今为止的整个项目!
  • @Dutchie432:表格是否正在显示?
【解决方案2】:

一般更好的过程是为内部事件处理被覆盖的虚拟方法,而不是为触发的事件注册。

protected override void OnLoad(EventArgs e)
{
  // Your code here

  base.OnLoad(e);
}

如果不调用它会很有趣。

【讨论】:

  • 我想我已经按照你的建议实现了代码,但仍然没有结果。请参阅上面的更新。
  • 最终没有解决问题,但仍然是一个很好的指针。 +1
  • 我在 OnLoad 中添加了一个断点,发现那里出错了。这阻止了调用加载事件。所以谢谢你的提示。
【解决方案3】:

这里有一个解决方法:

InitializeComponent();之后直接插入您的代码。
在此调用之后,表单的私有字段被初始化,您可以与 UI 对象进行交互。

我知道这不能直接回答问题,但它应该在大多数情况下都有效。

【讨论】:

    【解决方案4】:

    我能够通过删除和重新添加对 WebKit 控件的引用来完成这项工作。不知道发生了什么,但John Arlen 的评论将我引向了正确的方向。谢谢大家。

    【讨论】:

      【解决方案5】:

      它不触发的另一个原因是,如果您使用 DataBindings 并且由于您更改了属性名称或删除了属性而出现错误。

      【讨论】:

      • 我刚刚确认了这一点。我有一个绑定到相应类中不再存在的属性。 VS 没有给你任何关于这个的线索(至少我没有看到任何线索)。删除不正确的绑定后,Load 事件再次起作用。
      【解决方案6】:

      我刚刚解决了同样的问题。根本原因应该是加载 Form1 时没有触发 Form1_Load 事件。只需在Designer视图中打开Form1,点击Form1的标题,点击Form1属性下的'Event'标签,在属性列表中找到'Load',你会在它的右边找到一个事件列表。选择“Form1_Load”,重建它。您可以通过选择除 Form1_Load 之外的任何事件来检查是否调用了 Form1_Load()。

      【讨论】:

      • 我只是遇到了同样的问题——在没有调用 Form1_Load 的情况下显示表单——斯坦你的回答解决了它!谢谢!
      【解决方案7】:

      我来这里是为了同样的问题。当我看到更新时:

      我能够通过删除和重新添加对 WebKit 控件的引用来完成这项工作。不知道发生了什么。谢谢大家。

      我意识到我的情况出了什么问题。和 Scott 一样,我也有一段时间没有接触过任何 c# 并且忘记了一个关键细节。

      我想要一些简单的示例代码来检查 listview 是否按我需要的方式工作。最好的文档是工作代码,所以我从 https://www.dotnetperls.com/listview 复制了一个示例。启动 VS2010 并将代码粘贴到 Visual Studio 为我生成的表单程序中。运行它并得到与斯科特完全相同的东西 - 一个带有空白列表的空白表格。

      原因是在 Visual Studio 中,当您将控件添加到表单时,您不会自动获取所有事件处理程序 - form_load 是缺少的处理程序之一。你得到了绘制控件的代码,就是这样。要告诉 Windows 你有表单加载事件的处理程序,你必须添加

      this.Load += new System.EventHandler(this.Form1_Load);

      到表单的 InitializeComponent 中的代码。当我将控件添加到表单时,该行丢失了,因此我的处理程序没有被调用。

      您可以手动添加该行,也可以进入 Visual Studio 的设计窗口并单击表单的空白部分。您将看到自动生成的新的空存根,如下所示:

      private void Form1_Load_1(object sender, EventArgs e)

      {

      }

      名称后面加上下划线 1 是因为我已经有了不起作用的 Form1_Load 例程。

      如果您随后检查 form1.designer.cs 代码,您会看到 this.load += .... 行已添加到初始化代码中。

      有时简单的示例代码并不那么简单。

      【讨论】:

        【解决方案8】:

        今天遇到这个,起初很困惑。在阅读了这个和类似的建议解决方案之后,我的谜团被解开了。

        首先:我如何快速确定我的问题 - 我将 this.Load 事件注册移动到设计器生成的代码中 InitializeComponent() 的第一行。然后到了我的断点。然后我为所有抛出的异常打开了“中断”,包括本机。这直接导致了我的问题。

        在我的例子中,包含一个 web 控件导致加载发生在一个令人惊讶的早期时刻,就在构建之后;我的代码是在假设页面最终在 UI 中激活时发生加载的情况下编写的。它依赖于尚未设置的状态变量。

        其他问题,例如缺少依赖延迟加载的 DLL、上游加载处理程序中的异常等,都可以通过这种方式进行跟踪。

        修复后,我将 this.Load() 移回原来的位置。

        【讨论】:

          【解决方案9】:

          在这里聚会有点晚了,但只需双击 Form1.cs [设计] 选项卡上的标题,它就会创建 Form1_Load 函数,然后就可以正常工作了。

          手动编写似乎不起作用,因为当您双击它时会创建连接,就像双击按钮、列表框等时会发生相同的功能一样。

          【讨论】:

            【解决方案10】:

            突然遇到同样的问题,从release模式切换到debug模式后解决了,不知道为什么。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2019-11-20
              • 1970-01-01
              • 1970-01-01
              • 2011-10-29
              • 1970-01-01
              相关资源
              最近更新 更多