0

BackColorユーザー コントロールとForeColorその中のラベルのプロパティを変更しようとしています。以下は私のコードです:

private void NRow_MouseLeave(object sender, EventArgs e)
{
   BackColor = Color.White;
   label1.ForeColor = Color.Black;
}

private void NRow_MouseEnter(object sender, EventArgs e)
{
   BackColor = Color.Lime;
   label1.ForeColor = Color.White;
}

しかし、うまくいきません。BackColor を変更する行にブレークポイントを追加しようとしても、そこに制御が到達していません。イベントバインディングもチェックしましたが、問題ありません。ユーザー コントロールは、次のようにパネルに追加されます。

notContainer.Controls.Add(new NRow());

何が起こっているのかわかりません。助けてください。

アップデート:

イベント ハンドラーは次のようにアタッチされます。

this.MouseEnter += new System.EventHandler(this.NRow_MouseEnter);
this.MouseLeave += new System.EventHandler(this.NRow_MouseLeave);
4

3 に答える 3

2

label1ユーザー コントロール (UC) NRow 内に配置されている場合は、処理する必要がありMouseEnterます。なぜなら、マウスがその上を移動したときに、UC の内部で UC の代わりにマウス イベントを処理できるからです。MouseEventlabel1label1

this.MouseEnter += new System.EventHandler(this.NRow_MouseEnter);
this.MouseLeave += new System.EventHandler(this.NRow_MouseLeave);    
label1.MouseEnter += new System.EventHandler(this.NRow_MouseEnter);
label1.MouseLeave += new System.EventHandler(this.NRow_MouseLeave);

注: 上記のすべての行は、UC NRow 内に配置する必要があります。

于 2013-09-20T22:52:09.553 に答える
2

UserControl's OnMouseLeaveandをオーバーライドOnMouseEnterし、メソッドを使用して、元に戻す前にPointToClientマウス座標がまだ 内にあるかどうかを判断することで、機能させることができました。このようなものが機能するかどうかを確認してください。UserControl

public partial class UserControl1 : UserControl
{
    public UserControl1()
    {
        InitializeComponent();
    }
    protected override void OnMouseEnter(EventArgs e)
    {
        BackColor = Color.Lime;
        label1.ForeColor = Color.White;

        base.OnMouseEnter(e);
    }

    protected override void OnMouseLeave(EventArgs e)
    {
        if (! Bounds.Contains(PointToClient( MousePosition)))
        {
            BackColor = Color.White;
            label1.ForeColor = Color.Black;
            base.OnMouseLeave(e);
        }        
    }
}
于 2013-09-20T23:12:24.077 に答える