В простейшем случае все, что вам урожденная нужно сделать, это создать
List<Rectangle> rects = new List<Rectangle>();
Заполните их с координатами:
rects.Add(new Rectangle(11,22,55,55));
rects.Add(new Rectangle(66,22,55,55));
//..
И проверить в MouseClick event:
private void Form1_MouseClick(object sender, MouseEventArgs e)
{
foreach (Rectangle r in rects)
if (r.Contains(e.Location))
{
// do things here
Console.WriteLine("You have hit Rectangle no.: " + rects.IndexOf(r));
}
}
Если вы хотите создать более сложный класс (или структуру) для удерживайте больше, чем просто список прямоугольников и сохраняйте с ними другие данные, такие как идентификатор или другие параметры, или, возможно, даже делегаты, указывающие на действия, которые вы хотите сделать.
Для более сложных изображений я нашел самый простой и, тем не менее, самый мощный способ - создать их в виде растровых изображений того же размера, что и изображение, покрасить их по мере необходимости, и они будут считывать цвета, используя местоположение MouseClick, как поиск в битовой карте, которая хранится в памяти.
Обновление : Для изображения размещено самое простое решение - создать Список и проверить его:
List<Color> colors = new List<Color>();
Добавьте цвета:
colors.Add(Color.Brown);
//..
private void Form1_MouseClick(object sender, MouseEventArgs e)
{
Color cHit = ((Bitmap)this.BackgroundImage).GetPixel(e.X, e.Y);
foreach (Color c in colors)
if (cHit .ToArgb() == c.ToArgb())
{
// do things here
Console.WriteLine("You have hit Rectangle no.: " + colors .IndexOf(c) + " with Color " + cHit.ToString());
}
Очевидно, что это будет работать, только если список цветов имеет же цвета как изображения! Легко, если вы сами создаете изображение; иначе вам нужно будет позаботиться о создании списка правильно!
Примечание: Если вы используете Form.BackgroundImage
убедитесь, чтобы установить BackgroundImageLayout
в None
или иначе координаты мыши не совпадают пикселей в изображении! Если вы хотите Center
, вам нужно рассчитать смещения! Использование Panel
или PictureBox
гораздо более гибкое.
Вы можете добавить 10 пустых элементов ** PictureBox **, изменить размер и поместить их туда, где хотите, установить курсор на ** Ручной **, а затем назначить события каждый из элементов управления. –
Я не думаю, что добавление 10 элементов управления в форму - хорошая идея. Взгляните на это, чтобы понять, куда идти. http://stackoverflow.com/questions/21286617/creating-clickable-c-sharp-image-map-in-winforms – Yatrix
_Clicking на 10 различных частях .._ Какие «части» вы хотите? прямоугольники или фигуры или цветные области .. ?? Есть много способов сделать это, но найти лучший, который нам нужно знать больше! – TaW