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のプロパティの下にある[Event]タグをクリックして、プロパティリストで[Load]を見つけると、右側にイベントのリストが表示されます。'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

WebKitコントロールへの参照を削除して再度追加することで、これを機能させることができました。何が起こったのかはわかりませんが、コメントはJohn Arlen私を正しい方向に導きました。みんな、ありがとう。

于 2011-03-04T19:26:13.193 に答える
3

これは、なぜ発火しないのか想像できる最も簡単なことです。

問題は「起動しない」ということではなく、問題のコードが予想どおりに処理されていないことだと思います。

「* .Dock」行にブレークポイントを設定してみてください。上記のコードを考えると、このフォームを表示するとすぐにヒットするはずです。ただし、Form.Loadこれはイベントであるため、フォームのインスタンスが実際にを介して表示されるまで、これは発生しませんform.Show()

于 2011-03-04T18:32:56.847 に答える
3

私はまったく同じ問題のためにここに来ました。アップデートを見たらすぐに:

WebKitコントロールへの参照を削除して再度追加することで、これを機能させることができました。何が起こったのかわからない。みんな、ありがとう。

私の場合、何が悪いのか気づきました。スコットのように、私はしばらくの間C#を実行しておらず、重要な詳細を忘れていました。

listviewが必要な方法で機能するかどうかを確認するために、簡単なサンプルコードが必要でした。最良のドキュメントは動作するコードなので、 https://www.dotnetperls.com/listviewからサンプルをコピーしました。VS2010を起動し、VisualStudioが生成したフォームプログラムにコードを貼り付けました。それを実行して、スコットがしたのとまったく同じことを手に入れました-空白のリストを持つ空白のフォーム。

その理由は、Visual Studioでフォームにコントロールを追加すると、すべてのイベントハンドラーが自動的に取得されないためです。form_loadは欠落しているハンドラーの1つです。コントロールを描画するためのコードを取得し、それだけです。フォームの読み込みイベントのハンドラーがあることをWindowsに通知するには、次を追加する必要があります。

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

フォームのInitializeComponentのコードに。フォームにコントロールを追加したときにその行が欠落していたため、ハンドラーが呼び出されませんでした。

行を手動で追加するか、Visual Studioのデザインウィンドウに移動して、フォームの空の部分をクリックすることができます。次のような自動生成された新しい空のスタブが表示されます。

private void Form1_Load_1(object sender、EventArgs e)

{{

}

すでに機能していないForm1_Loadルーチンがあったため、アンダースコア-1が名前に付けられています。

次にform1.designer.csコードを確認すると、this.load +=....行が初期化コードに追加されていることがわかります。

単純なサンプルコードはそれほど単純ではない場合があります。

于 2017-01-10T18:18:12.513 に答える
1

起動しないもう1つの理由は、DataBindingsを使用していて、プロパティ名を変更したか、プロパティを削除したためにエラーが発生した場合です。

于 2015-07-05T03:08:39.977 に答える
0

今日これに遭遇し、最初は戸惑いました。これと同様の提案された解決策を読んだ後、私の謎は解き明かされました。

最初:問題をすばやく特定する方法-this.Loadイベント登録を、デザイナーが生成したコードのInitializeComponent()の最初の行として上に移動しました。その後、私のブレークポイントに到達しました。次に、ネイティブを含む、スローされたすべての例外に対して「ブレーク」をオンにしました。これは私を問題に直結させました。

私の場合、Webコントロールを含めると、建設直後の驚くほど早い時期に荷重が発生しました。ここで、私のコードは、ページがUIで最終的にアクティブ化されたときにロードが発生するという仮定で記述されています。まだ設定されていない状態変数に依存していました。

依存する遅延ロードDLLの欠如、アップストリームロードハンドラの例外などの他の問題は、すべてこの方法で追跡できます。

修正後、this.Load()を元の場所に戻しました。

于 2017-05-04T14:48:29.573 に答える
0

ここでのパーティーには少し遅れますが、Form1.cs [デザイン]タブのタイトルをダブルクリックするだけで、Form1_Load関数が作成され、正常に機能します。

ボタンやリストボックスなどをダブルクリックしたときに同じ機能が発生するのと同じように、手動で記述した場合は、ダブルクリックしたときにフックアップが作成されるため、機能しないようです。

于 2021-04-21T22:13:39.060 に答える
0

同じ問題に突然遭遇し、リリースからデバッグモードに変更した後に修正されましたが、理由はわかりません。

于 2021-08-26T07:08:37.180 に答える