Групповое поле - это статический элемент управления, в котором находятся другие элементы управления. Он предназначен исключительно для «группировки» вещей, чтобы сделать пользовательский интерфейс интуитивно понятным, если он правильно изложен. Следовательно, есть очень мало событий, которые вы можете использовать от имени GroupBox.
Возможно, вы сможете создать новый класс, унаследованный от GroupBox, и создать его подкласс для перехвата события перемещения мыши. Существует очень полезный класс, который я использовал ранее, и действительно легко выполнить подклассы и вызвать событие для MouseMove.
Взгляните на это здесь , чтобы увидеть, как будет работать подклассы ... Хорошо, оно написано в VB.NET, но его действительно легко перевести на C #, если вы этого хотите, код, который я представляю, будет выглядеть так:
Примечание. Этот код, который я включил, находится у меня в голове, поэтому в этом может быть ошибка ... но в этом суть.
Редактировать: В ответ на комментарий Джо Уайта я включил пересмотренный код, и он действительно отправляет WM_MOUSEMOVE ... посмотрите на шаги ниже, как я воспроизвел это в VS 2008 Pro.
public class MyGroupBox : System.Windows.Forms.GroupBox
{
private SubClass sc;
private const int WM_MOUSEMOVE = 0x200;
public delegate void MyMouseMoveEventHandler(object sender, System.EventArgs e);
public event MyMouseMoveEventHandler MyMouseMove;
public MyGroupBox()
: base()
{
sc = new SubClass(this.Handle, true);
sc.SubClassedWndProc += new SubClass.SubClassWndProcEventHandler(sc_SubClassedWndProc);
}
protected override void Dispose(bool disposing)
{
if (sc.SubClassed)
{
sc.SubClassedWndProc -= new SubClass.SubClassWndProcEventHandler(sc_SubClassedWndProc);
sc.SubClassed = false;
}
base.Dispose(disposing);
}
private void OnMyMouseMove()
{
if (this.MyMouseMove != null) this.MyMouseMove(this, System.EventArgs.Empty);
}
void sc_SubClassedWndProc(ref Message m)
{
if (m.Msg == WM_MOUSEMOVE) this.OnMyMouseMove();
}
}
#region SubClass Classing Handler Class
public class SubClass : System.Windows.Forms.NativeWindow
{
public delegate void
SubClassWndProcEventHandler(ref System.Windows.Forms.Message m);
public event SubClassWndProcEventHandler SubClassedWndProc;
private bool IsSubClassed = false;
public SubClass(IntPtr Handle, bool _SubClass)
{
base.AssignHandle(Handle);
this.IsSubClassed = _SubClass;
}
public bool SubClassed
{
get { return this.IsSubClassed; }
set { this.IsSubClassed = value; }
}
protected override void WndProc(ref Message m)
{
if (this.IsSubClassed)
{
OnSubClassedWndProc(ref m);
}
base.WndProc(ref m);
}
#region HiWord Message Cracker
public int HiWord(int Number)
{
return ((Number >> 16) & 0xffff);
}
#endregion
#region LoWord Message Cracker
public int LoWord(int Number)
{
return (Number & 0xffff);
}
#endregion
#region MakeLong Message Cracker
public int MakeLong(int LoWord, int HiWord)
{
return (HiWord << 16) | (LoWord & 0xffff);
}
#endregion
#region MakeLParam Message Cracker
public IntPtr MakeLParam(int LoWord, int HiWord)
{
return (IntPtr)((HiWord << 16) | (LoWord & 0xffff));
}
#endregion
private void OnSubClassedWndProc(ref Message m)
{
if (SubClassedWndProc != null)
{
this.SubClassedWndProc(ref m);
}
}
}
#endregion
- Создать простую пустую форму.
- Перетащите групповой блок из палитры инструментов и поместите его в форму, имя по умолчанию будет
groupBox1
- В коде конструктора вашей формы измените ссылку на код, выполнив это:
System.Windows.Forms.GroupBox groupBox1;
до WindowsApplication.MyGroupBox groupBox1;
- В методе
InitializeComponent()
измените экземпляр GroupBox на этот: this.groupBox1 = new WindowsApplication.MyGroupBox();
- Сохраните и просто скомпилируйте его.
- Вернитесь в окно дизайнера и нажмите на групповое поле, найдите событие
MyMouseMove
на панели инструментов свойств и подключите его.
- Ваш обработчик событий должен выглядеть примерно так:
private void groupBox1_MyMouseMove(object sender, EventArgs e)
{
System.Diagnostics.Debug.WriteLine("MyMouseMove!");
}
Запустите приложение, и каждый раз, когда вы будете перемещать мышь внутри группового блока, вы увидите вывод «MyMouseMove!».
Надеюсь, это даст вам подсказку,
С наилучшими пожеланиями,
Том.