2010-10-19 4 views
0

Я новичок в C#, но не в OOP.C# - Есть ли (например) .AddChild и .AddEventListeners в C# и могут ли они использоваться в Graphics?

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

Я не уверен, как именно я могу это сделать. Если бы я использовал Flash, я бы, вероятно, сделать что-то вроде:

my_circle_object = new disc-or-whatever-etc; 
canvas.addChild(my_circle_object); 
my_circle_object.AddEventListener(MouseClickEvent, function_to_remove_child); 

Теперь, так как скомпилированные языки дьявола, когда речь идет о простом фронтальных связанных UI вещей, я уверен, что он будет принимать 20 раз больше кода, чтобы написать это в C#. Но есть ли что-то похожее на мой пример?

Я провел все чтение днем ​​на таких вещах, как GraphicsContainers, SmoothingPaint, Графика Постоянство с использованием растровых изображений и т.д., но я не нашел простой способ добавить событие ..

Спасибо

+0

Вы должны рассмотреть [Windows Presentation Foundation (WPF)] (http://msdn.microsoft.com/en-us/library/aa970268.aspx), который уже содержит необходимые классы и инфраструктуру для добавления фигур на холст и привязать к отдельным событиям для каждой фигуры (или просто уловить все события для объектов, содержащихся в холсте). Фактически, WPF является основой для Silverlight, прямого конкурента Microsoft для Flash. –

+0

OMG чувак, я никогда не думал о поиске в проекте проекта WPF Application. Это блестяще, это как MXML и ActionScript, это облегчит мою жизнь. Спасибо, что указал мне в правильном направлении :) (надеюсь, что моя предстоящая лаборатория C# в колледже фактически позволит нам использовать WPF) – Spectraljump

ответ

0

Объектов, которые вы рисуете используя методы формы на объекте Graphics (например, DrawLine, DrawEllipse, DrawRect и т. д.) не представляют собой концептуальные объекты, относящиеся к графическому API. Вызов этих функций просто рисует элемент на графической поверхности в виде растрового изображения. Как только это будет сделано, нет ничего, чтобы присоединить событие.

Вам нужно будет создать свои собственные типы фигур и заставить их притянуть себя к графическому объекту. Вам нужно будет присоединяться к соответствующим событиям мыши независимо от того, какой вы используете (я принимаю Panel) и выполняю собственное обнаружение конфликтов.

+0

Спасибо за ваш ответ. Так должен ли я, например, создать класс Circle, который создает новый графический объект с эллипсом в нем, а затем добавить circle_instance в Panel? (если это так, как мне добавить объект в Panel через код в C#?) – Spectraljump

+0

@Twodordan: Нет, вы создали бы объект «Круг», содержащий информацию * о круге (местоположение, диаметр, цвет, и т. д.), тогда, когда срабатывает событие 'Paint' 'Panel', вы должны передать объект« Graphics », предоставленный в этом событии, ко всем различным формам в вашей« панели »(вам нужно будет поддерживать собственный список) и позволить им нарисовать себя на поставляемом объекте «Graphics». –

+0

Спасибо. Так вот как это работает. – Spectraljump