Передача событий мыши в Base Control, поиск хорошего решения - PullRequest
0 голосов
/ 02 февраля 2011

Привет,

Спасибо за чтение.Ответы, которые я получил, действительно помогли мне, МНОГО!

Но к проблеме.У меня UserControl в качестве базового класса.Дочерний класс добавляет свои элементы управления в UserControl, позволяет вызывать первый BaseControl и второй ChildControl.

На уровне BaseControl у меня есть несколько делегатов, прикрепленных к некоторым MouseEvents.

Проблема в том, что они не будут срабатывать, если к ним добавлен дочерний элемент управления.Так что я знаю, что могу взять все Мышиные события со всех Детских событий и пройти через них.Но то, во-первых, очень грязно, во-вторых, недостаточно.Потому что я хочу, чтобы рисовать границу вокруг или переместить BaseControl.

Так что мой вопрос действительно: есть ли способ получить полный доступ к MouseEvents в Base Control, если добавлены ChildControls?

Спасибо большое!

Томас

РЕДАКТИРОВАТЬ:

Вот фрагменты, надеюсь, вы понимаете:

 public partial class baseControl : UserControl
{
    public baseControl()
    {

        InitializeComponent();

        //will not be called 
        this.MouseUp += delegate(object sender, MouseEventArgs e)
        {
            // some code
        };
    }

}

public partial class child : baseControl
{
    secretControl childControl; 
    public child()
    {
        InitializeComponent();
        this.childControl= new secretControl ();
        this.childControl.Visible = true;
        //... ,more 
        this.forChildUsePanel.Add(this.childControl);


        // works fine , as it will be called
        this.childControl.MouseUp += delegate(object sender, MouseEventArgs e)
        {
            // some code
        };


    }

}

Напоминание: Этоявляются фрагментами, поэтому для понимания цели он срезает некоторые углы.

Simpelput: я хочу получить событие мыши для каждого элемента управления, добавленного в BaseControl.

Ответы [ 3 ]

0 голосов
/ 02 февраля 2011

Какие элементы управления вы добавляете?Это может быть решение для настройки этих элементов управления.Если вы, например, добавляете Label, создайте новый MousePassthroughLabel, который наследуется от Label и встроенного MouseEvent, который просто запускает один из родительских элементов управления.Сделайте это один раз для каждого типа элемента управления и используйте собственные элементы управления MousePassthrough вместо собственных элементов управления.

0 голосов
/ 02 февраля 2011

Существует новая технология Microsoft, Reactive Extensions , которая облегчит программирование на основе событий.

0 голосов
/ 02 февраля 2011

Я считаю, что вы должны прикреплять обработчик событий к каждому дочернему элементу управления, а не к родительскому элементу управления, если вы хотите перехватить его у дочернего элемента.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...