自从我涉足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);
}
}
}
UPDATE#2 我能够通过删除并重新添加对WebKit Control的引用来实现此功能。不确定发生了什么。谢谢大家。
答案 0 :(得分:7)
我刚刚解决了同样的问题。根本原因应该是在加载Form1时未触发Form1_Load事件。只需在Designer视图中打开Form1,单击Form1的标题,单击Form1属性下的'Event'标签,在属性列表中找到'Load',您将在其右侧找到一个事件列表。选择“Form1_Load”,重建它。您可以通过选择Form1_Load以外的任何事件来验证是否调用了Form1_Load()。
答案 1 :(得分:4)
通常更好的方法是处理内部事件的重写虚拟方法,而不是注册被触发的事件。
protected override void OnLoad(EventArgs e)
{
// Your code here
base.OnLoad(e);
}
如果不调用它会很有趣。
答案 2 :(得分:4)
这是一种解决方法:
在InitializeComponent();
之后直接插入您的代码
在此调用之后,表单的私有字段被初始化,您可以与UI对象进行交互。
我知道这不会直接回答这个问题,但在大多数情况下都应该有效。
答案 3 :(得分:3)
这是我能想象的最简单的事情,为什么它不会开火!
我怀疑问题并不在于它“不会触发”,而在于所讨论的代码并没有像你怀疑的那样处理事情。
尝试在“* .Dock
”行上设置断点。鉴于上面的代码,一旦你显示这个表单就应该打它。但是,因为它是Form.Load
事件,所以只有在通过form.Show()
实际显示表单实例时才会发生这种情况。
答案 4 :(得分:3)
我能够通过删除并重新添加对WebKit Control的引用来实现此功能。不确定发生了什么,但John Arlen
的评论引导我朝着正确的方向前进。谢谢大家。
答案 5 :(得分:2)
我来到这里是因为同样的问题。我一看到更新:
我能够通过删除并重新添加对WebKit Control的引用来实现此功能。不确定发生了什么。谢谢大家。
我意识到我的情况出了什么问题。像斯科特一样,我在一段时间内没有完成任何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 + = ....行已添加到初始化代码中。
有时简单的示例代码并非如此简单。
答案 6 :(得分:0)
它不会触发的另一个原因是,如果您使用DataBindings并且因为更改了属性名称或删除了属性而出现错误。
答案 7 :(得分:0)
今天遇到这个,起初困惑。在阅读了这个和类似的建议解决方案后,我的神秘感被解锁了。
首先:我如何快速确定我的问题 - 我将this.Load事件注册为设计器生成的代码中InitializeComponent()的第一行。然后我的断点到了。然后我为所有抛出的异常打开“break”,包括native。这让我直截了当地解决了这个问题。
在我的情况下,包含一个网络控件导致负载在一个令人惊讶的早期时刻发生,就在施工后;我的代码是用假设编写的,在UI中最终激活页面时会发生Load。它依赖于尚未设置的状态变量。
其他问题,如缺少依赖延迟的DLL,上游Load处理程序中的异常等,都可以通过这种方式进行跟踪。
修好之后,我把它移动了。载荷()回到原来的位置。
答案 8 :(得分:0)
这里的聚会有点晚了,但只需双击 Form1.cs [设计] 选项卡上的标题,它就会创建 Form1_Load 函数,然后它就可以正常工作了。
手动编写它似乎不起作用,因为当您双击它时会创建连接,就像双击按钮、列表框等时发生的相同功能一样。