4

自从我涉足 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 控件的引用来完成这项工作。不知道发生了什么。感谢大家。

4

10 回答 10

10

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

于 2015-11-09T06:30:59.270 回答
5

这是一个解决方法:

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

我知道这并不能直接回答问题,但在大多数情况下它应该可以工作。

于 2011-03-04T19:04:51.560 回答
4

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

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

  base.OnLoad(e);
}

如果不调用它会很有趣。

于 2011-03-04T18:49:44.710 回答
3

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

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

尝试在“* .Dock”行设置断点。鉴于上面的代码,它应该在您显示此表单后立即被点击。但是,由于它是一个Form.Load事件,因此在表单实例通过form.Show().

于 2011-03-04T18:32:56.847 回答
3

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

于 2011-03-04T19:26:13.193 回答
3

我来这里是为了完全相同的问题。刚看到更新:

我能够通过删除和重新添加对 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(对象发送者,EventArgs e)

{

}

下划线 1 被附加到名称上,因为我已经有了不起作用的 Form1_Load 例程。

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

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

于 2017-01-10T18:18:12.513 回答
1

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

于 2015-07-05T03:08:39.977 回答
0

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

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

于 2021-04-21T22:13:39.060 回答
0

突然遇到同样的问题,从发布模式更改为调试模式后得到修复,不知道为什么。

于 2021-08-26T07:08:37.180 回答
0

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

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

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

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

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

于 2017-05-04T14:48:29.573 回答