Не могу рябить пользовательское событие щелчка элемента управления до формы хоста
Я создаю пользовательский элемент управления (называемый видовым окном) с двумя AForge PictureBox и одним ListBox. Три контроля заполнения пользовательских элементов управления.
Я хочу, чтобы обработчик событий в форме хоста реагировал на щелчок мыши на любом из видовых экранов (по 1 на каждую веб-камеру, подключенную к компьютеру, до шести), добавленных в форму хоста во время выполнения.
Я уже несколько дней читаю форумы и пробовал бесконечно разные способы. Самое близкое, что у меня есть, показано ниже. Я получаю исключение null object для объекта vpClick.
vpClick(103, this.Name);
Что я уже пробовал:
В пользовательском элементе управления
<pre>using System.ComponentModel; using System.Drawing; using System.Data; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace FlowerControls { // Add delegate for all control click events public delegate void VPClick(int Code, string Title); public partial class ViewPort: UserControl { // Define event from delegate public event VPClick vpClick;
:::::
<pre> private void PictureFlower_Click(object sender, EventArgs e) { vpClick(101, this.Name); } private void ListBoxViews_SelectedIndexChanged(object sender, EventArgs e) { vpClick(102, this.Name); } private void KeyIcon_Click(object sender, EventArgs e) { vpClick(103, this.Name); }
В форму
// Declare a delegate public delegate void ViewPort_click(object sender, MouseEventArgs e);
::::
FlowerControls.ViewPort VP01; int a = 1; while (a < 7) { VP01 = new FlowerControls.ViewPort(); //VP01.ContextMenuStrip = contextMenuStripViewPort; VP01.Height = viewPortHeight; VP01.Width = viewPortHeight; //VP01.SizeMode = PictureBoxSizeMode.Zoom; VP01.BloomPhoto = Properties.Resources.testpattern; VP01.BorderStyle = BorderStyle.FixedSingle; VP01.Location = new Point(I * viewPortHeight, 0); I += 1; viewports.Add(a, VP01); splitContainer2.Panel1.Controls.Add(viewports[a]); //viewports[a].Click += new ViewPort_click(object sender, MouseEventArgs e); a++; }
::::
public void ViewPort_click(object sender, MouseEventArgs e) { //do stuff here MessageBox.Show("Click"); } public void vpClick(int Code, string Name) { MessageBox.Show(Name); }