6

WinFormsユーザーコントロールを作成しました。いくつかの場所GotFocus()LostFocus()イベントを読みましたが、ユーザーコントロールは、[プロパティ]ウィンドウの[イベント]部分にこれらのイベントを提供していません。

これらのイベントハンドラーが表示されるかどうかを確認するために入力overrideしてみましたが、表示されません。どこにも見つかりません。

したがって、これらの名前で独自のメソッドを作成すると、次のエラーが発生します。

警告1'mynamespace.mycontrol.GotFocus()'は、継承されたメンバー'System.Windows.Forms.Control.GotFocus'を非表示にします。非表示にする場合は、新しいキーワードを使用します。

ここで一体何が起こっているのか。すでに存在する場合GotFocus()、なぜそれを見つけて使用できないのですか?

4

4 に答える 4

11

MSDNのドキュメントから、それらはControlから継承されているように見えますが、使用することはお勧めしません。彼らはあなたにEnterイベントとLeaveイベントを使用してほしいと思っています。

注GotFocusイベントとLostFocusイベントは、WM_KILLFOCUSおよびWM_SETFOCUSWindowsメッセージに関連付けられている低レベルのフォーカスイベントです。通常、GotFocusイベントとLostFocusイベントは、UICuesを更新するとき、またはカスタムコントロールを作成するときにのみ使用されます。代わりに、EnterイベントとLeaveイベントは、ActivatedイベントとDeactivateイベントを使用するFormクラスを除くすべてのコントロールに使用する必要があります。

OnGotFocusつまり、+ =で提案されたUser1718294としてそれらにアクセスするか、およびOnLostFocusイベントをオーバーライドすることができます。

protected override void OnLostFocus(EventArgs e)
{
    base.OnLostFocus(e);
}

protected override void OnGotFocus(EventArgs e)
{
    base.OnGotFocus(e);
}
于 2012-11-13T04:04:08.763 に答える
4

GotFocusは、すでに存在するイベントです。「GotFocus」というメソッドを作成しようとしています。同じ名前のイベントが既に存在するため、この名前でメソッドを作成することはできません。

イベントを「使用」するには、次のように関数を登録する必要があります。

mycontrol.GotFocus += mycontrol_GotFocus;

次に、このメソッドを追加して、イベントを処理します。

private void mycontrol_GotFocus(object sender, EventArgs e)
{
   MessageBox.Show("Got focus.");
}
于 2012-11-13T03:26:21.533 に答える
0

1つのクラスから継承し、そのクラスに含まれるメソッド/プロパティがわからない場合は、基本オブジェクトを確認するだけです。

「base」と入力します。メソッド本体とオートコンプリートの内部に、基本メソッドが表示されます。

于 2012-11-13T04:10:29.780 に答える
0

VisualStudio2010の使用

フォーカスが得られたときにアクティブ化されたイベントを使用し、フォーカスが失われたときに非アクティブ化されたイベントを使用します。これは、フォーカスを取得したときにフォーム名を変更する次のサンプルコードです。(ファイル名は、Formクラスを拡張するForm1クラスの文字列メンバーです)

private void Form1_Activated(object sender, EventArgs e)
    {
        if (fileName == "Untitled")
            this.Text = fileName + "- Text Editor";
        else this.Text = fileName + "- Text Editor";
    }
于 2016-12-27T08:05:41.900 に答える