Form1_Load即使在添加处理程序后也不会触发

Dut*_*432 3 c# event-handling winforms form-load

自从我涉足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");
        }

    }
}
Run Code Online (Sandbox Code Playgroud)

UPDATE

  • 我用断点来验证线路不是他的
  • 表格确实显示 结果表格的截图

我也试过以下但没有成功......

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);
        }


    }
}
Run Code Online (Sandbox Code Playgroud)

更新#2我能够通过删除和重新添加对WebKit Control的引用来实现此功能.不确定发生了什么.感谢大家.

Sta*_*wan 8

我刚刚解决了同样的问题.根本原因应该是在加载Form1时未触发Form1_Load事件.只需在Designer视图中打开Form1,单击Form1的标题,单击Form1属性下的'Event'标签,在属性列表中找到'Load',您将在其右侧找到一个事件列表.选择"Form1_Load",重建它.您可以通过选择Form1_Load以外的任何事件来验证是否调用Form1_Load().


Tam*_*chi 5

解决方法:

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

我知道这不能直接回答问题,但是在大多数情况下应该可以解决。


Mic*_*el 5

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

我可以通过删除并重新添加对 WebKit 控件的引用来实现此目的。不知道发生了什么。感谢大家。

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

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

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

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

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

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

私人无效Form1_Load_1(对象发送者,EventArgs e)

{

}

名称中添加了下划线-1,因为我已经有了无法正常工作的 Form1_Load 例程。

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

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


Dut*_*432 3

我可以通过删除并重新添加对 WebKit 控件的引用来实现此目的。不知道发生了什么,但评论引导John Arlen我走向正确的方向。感谢大家。