Событие Mouse Hover не срабатывает над панелью в С#

Я пытаюсь написать код для события Mouse_Hover панели в моем приложении winform, используя С#. Это мой код..

private void viewscreen_MouseHover(object sender, EventArgs e)
    {
        statuspnl.Enabled = true;
        statuspnl.Visible = true;
    }

но проблема в том, что событие не запускается, когда я провожу мышью над панелью просмотра

 // viewscreen
        // 
        this.viewscreen.BackColor = System.Drawing.SystemColors.ActiveCaptionText;
        this.viewscreen.Controls.Add(this.statuspnl);
        this.viewscreen.Location = new System.Drawing.Point(208, 16);
        this.viewscreen.Name = "viewscreen";
        this.viewscreen.Size = new System.Drawing.Size(370, 290);
        this.viewscreen.TabIndex = 0;
        this.viewscreen.MouseHover += new System.EventHandler(this.viewscreen_MouseHover);

person Arindam Das    schedule 13.09.2012    source источник
comment
Как вы подключаете этот обработчик событий?   -  person    schedule 13.09.2012
comment
Я имею в виду, как ваш код узнает, что viewscreen_MouseHover обрабатывает событие MouseHover для вашего элемента управления viewscreen?   -  person    schedule 13.09.2012
comment
Как ваш код узнает, что этот обработчик событий предназначен для этого конкретного события для этого конкретного элемента управления? Автоматически сгенерированный код дизайнера? Явно устанавливает обработчик событий при загрузке формы? Каков результат точек останова/отладки? Взгляните на свою тему Arindam - вы заметите, что не так много людей помогают вам по какой-то причине.   -  person    schedule 13.09.2012
comment
@DeeMac Ответ на ваш вопрос уже есть в опубликованном коде. Посмотрите на последнюю строку кода в вопросе. Он явно прикрепил обработчик к методу viewscreen_MouseHover внутри того же класса, который содержит элемент управления viewScreen. Обратите внимание на this перед элементом управления и методом?   -  person sprite    schedule 04.07.2013


Ответы (3)


Создайте одно оконное приложение с именем «panelvisible». Добавьте одну форму как «Form1» и добавьте этот код в соответствующие файлы.

Код для дизайнера

namespace panelvisible
{
    partial class Form1
    {
        /// <summary>
        /// Required designer variable.
        /// </summary>
        private System.ComponentModel.IContainer components = null;

        /// <summary>
        /// Clean up any resources being used.
        /// </summary>
        /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
        protected override void Dispose(bool disposing)
        {
            if (disposing && (components != null))
            {
                components.Dispose();
            }
            base.Dispose(disposing);
        }

        #region Windows Form Designer generated code

        /// <summary>
        /// Required method for Designer support - do not modify
        /// the contents of this method with the code editor.
        /// </summary>
        private void InitializeComponent()
        {
            this.panel1 = new System.Windows.Forms.Panel();
            this.label1 = new System.Windows.Forms.Label();
            this.panel2 = new System.Windows.Forms.Panel();
            this.panel1.SuspendLayout();
            this.SuspendLayout();
            // 
            // panel1
            // 
            this.panel1.BackColor = System.Drawing.Color.Red;
            this.panel1.Controls.Add(this.panel2);
            this.panel1.Controls.Add(this.label1);
            this.panel1.Location = new System.Drawing.Point(101, 36);
            this.panel1.Name = "panel1";
            this.panel1.Size = new System.Drawing.Size(200, 100);
            this.panel1.TabIndex = 0;
            this.panel1.MouseHover += new System.EventHandler(this.panel1_MouseHover);
            // 
            // label1
            // 
            this.label1.AutoSize = true;
            this.label1.Location = new System.Drawing.Point(49, 42);
            this.label1.Name = "label1";
            this.label1.Size = new System.Drawing.Size(31, 13);
            this.label1.TabIndex = 0;
            this.label1.Text = "Hello";
            this.label1.Visible = false;
            // 
            // panel2
            // 
            this.panel2.BackColor = System.Drawing.Color.Gray;
            this.panel2.Location = new System.Drawing.Point(33, 70);
            this.panel2.Name = "panel2";
            this.panel2.Size = new System.Drawing.Size(118, 10);
            this.panel2.TabIndex = 1;
            this.panel2.Visible = false;
            // 
            // Form1
            // 
            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
            this.ClientSize = new System.Drawing.Size(494, 205);
            this.Controls.Add(this.panel1);
            this.Name = "Form1";
            this.Text = "Form1";
            this.panel1.ResumeLayout(false);
            this.panel1.PerformLayout();
            this.ResumeLayout(false);

        }

        #endregion

        private System.Windows.Forms.Panel panel1;
        private System.Windows.Forms.Label label1;
        private System.Windows.Forms.Panel panel2;
    }
}

Код для кода позади

using System;
using System.Windows.Forms;

namespace panelvisible
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void panel1_MouseHover(object sender, EventArgs e)
        {
            this.label1.Visible = true;
            this.label1.Enabled = true;
            this.panel2.Visible = true;
            this.panel2.Enabled = true;
        }


    }
}
person Pushpendra    schedule 13.09.2012
comment
спасибо .. я не могу голосовать за вас .. потому что этот парень съел мою репутацию - person Arindam Das; 13.09.2012
comment
это не работает, когда я навожу мышь на квадраты, которые я рисую во время метода onpaint :( - person anon58192932; 23.02.2013

У вас был этот код?

this.viewscreen.MouseHover += new System.EventHandler(this.viewscreen_MouseHover);

Он должен быть добавлен автоматически, но убедитесь, что вы не меняете это... Другой способ - удалить событие наведения мыши и добавить его снова.

Надеюсь, это поможет.

person Vytalyi    schedule 13.09.2012

Вы просматриваете экран в форме или это действительно панель? И включена ли ваша панель/форма?

person Jordy van Eijk    schedule 13.09.2012