2013-11-29 4 views
1

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

exposing-events-of-underlying-control

я не получил их на работу (ответ на дне, казалось, наиболее прямо вперед для меня). Но на самом деле я хотел бы полностью отключить их события. У меня есть pictureBox и ярлык, мне не нужно взаимодействовать ни с одним из дочерних элементов управления. Есть ли способ отключить их, чтобы они не мешали событиям моего пользовательского контроля?

Edit:

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

public void Form1_MouseDown(object sender, MouseEventArgs e) 
    { 
     var myControl = sender as SubstanceViewer; 
     richTextBox1.Text = myControl.substanceInfo;    
    } 

поэтому мне нужно получить доступ к свойствам родительского элемента управления.

+0

Значит, вы не хотите, чтобы события в пользовательском контроле вообще? –

+0

Возможно, вы нашли приемлемый ответ на этот вопрос полезным: http://stackoverflow.com/questions/5102982/winforms-equivalent-of-wpfs-ishittestvisible –

+0

Нет, я просто хочу отключить события на дочерних элементах управления, они мешая событиям на моем пользовательском контроле. – topofsteel

ответ

1

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

Например, если вы нуждались в MouseMove() событие PictureBox и этикетки, чтобы огонь уже проводную вверх событие UserControl:

public partial class SomeUserControl : UserControl 
{ 

    public SomeUserControl() 
    { 
     InitializeComponent(); 
     this.pictureBox1.MouseMove += SomeUserControl_MouseMove; 
     this.label1.MouseMove += SomeUserControl_MouseMove; 
    } 

    private void SomeUserControl_MouseMove(object sender, MouseEventArgs e) 
    { 

    } 

} 

Имейте в виду, однако, что поскольку различные элементы управления обстреливают то же самое обработчик, вам нужно это учитывать. Например, значения e.X и e.Y в обработчике выше будут относиться к управлению источником.

* Вы также можете подключить эти события в режиме разработки с использованием самой IDE, но я подумал, что код лучше иллюстрирует решение.

+0

Спасибо, что работает, чтобы поймать и обработать событие дочернего контроля. Проблема в том, что я использую свойства своего настраиваемого элемента управления в своем ответе на событие в своем настраиваемом элементе управления. Могу ли я каким-либо образом передать объект-отправитель дочернего элемента управления в качестве родителя и получить доступ к свойствам родителя? – topofsteel

+0

Я не совсем понимаю, вы можете привести простой пример? Я уверен, что это можно сделать как-то ... –

Смежные вопросы