Прежде всего, я хотел бы извиниться за недостаток знаний, но я новичок в C#, и мне не хватает некоторых основных принципов.Как продлить функцию MouseEventHandler
Вот мой текущий сценарий: В моем сценарии я создаю что-то вроде шахматного столе pictureboxes
. Они размещены внутри элемента управления «Панель» в Winform форма - панель прокручивается! Каждый квадрат изображения имеет уникальное имя, например pbR1_C1
, сгенерированное в конструкторе.
R - означает Row на столе
С - Стойки для колонны на столе
Все сделано во время выполнения, так как размер шахматной регистрации загружается после запуска программы. Используемые объекты выглядеть следующим образом:
/* Simple preview of object with public variables - just for preview */
public class ptFcElement
{
public string stName; /* "pbR1_C1", "pbR1_C2" */
public int iRow; /* 1 */
public int iColumn; /* 4 */
public PictureBox pbPictureBox; /* using System.Drawing;*/
public ptFcElement()
{
stName = sGenerateName();
}
}
Затем я задаю обработчик событий для каждого ящика изображения
ptFcElementTemp.pbPictureBox.MouseClick += new MouseEventHandler(MouseButton_Click);
На данный момент я нахожусь в состоянии определить, что я нажал какую-нибудь фотографию коробки, но я не знаете, какой из них.
Вот вопрос: Поскольку панель прокручивать - я не могу просто определить отжатое окно изображения - это всегда вызывает ту же функцию.
void MouseButton_Click(object sender, MouseEventArgs e)
{
//Do some stuff....
//In case panel is not scrollable,
//I can identify pressed picture box by coordinates of mouse click.
//But if panel is scrollable, I am screwed.
}
Желаемая идея:
Есть ли возможность расширить MouseEventHandler
функцию события? Я знаю, что простые классы легко расширяются, но я не уверен, как работать с функциями событий.
ptFcElementTemp.pbPictureBox.MouseClick +=
new MouseEventHandler(MouseButton_Click, "pbR1_C1");
void MouseButton_Click(object sender, MouseEventArgs e, string sUniqueName)
{
//Here I am able to identify pressed bisturebox by sUniqueName
if (sUniqueName == "pbR1_C1")
{
//do something
}
if (sUniqueName == "pbR2_C3")
{
//do something different
}
}
Благодарим вас. И, пожалуйста, объясните это как можно проще, для манекена. :-)
Я только отредактировал мой ответ, чтобы показать вам, как интегрировать событие в свой собственный класс – Shnugo