Страница: 1 |
|
Вопрос: Вызов функции из всех экземпляров класса
|
Добавлено: 16.11.08 12:20
|
|
Автор вопроса: FIX | ICQ: 348680795
|
Имеется класс
Public Class Unit
Private fRadius As Single
Private fPosition As Point
Private fPen As Pen
Private fGraphics As Drawing.Graphics
Private fRectangle As Drawing.Rectangle
Public Sub New(ByRef pGraphics As System.Drawing.Graphics, ByVal pRadius As Single, ByVal pPosition As Point, ByVal pColor As Color, ByVal pWidth As Int16)
fGraphics = pGraphics
fRadius = pRadius
fPosition = pPosition
fPen = New Pen(pColor, pWidth)
fRectangle = New Drawing.Rectangle(fPosition.X, fPosition.Y, fRadius, fRadius)
End Sub
Public Property Radius() As Single
Get
Return fRadius
End Get
Set(ByVal value As Single)
fRadius = value
End Set
End Property
Public Property Position() As Point
Get
Return fPosition
End Get
Set(ByVal value As Point)
fPosition = value
fRectangle = New Drawing.Rectangle(fPosition.X, fPosition.Y, fRadius, fRadius)
End Set
End Property
Public Property ForeColor() As Color
Get
Return fPen.Color
End Get
Set(ByVal value As Color)
fPen.Color = value
End Set
End Property
Public Property Width() As Int16
Get
Return fPen.Width
End Get
Set(ByVal value As Int16)
fPen.Width = value
End Set
End Property
Public Sub Paint()
fGraphics.DrawEllipse(fPen, fRectangle))
End Sub
В ран-тайм я создаю сколько угодно экзмпляров класса, и для каждого приходится выполнять Sub Paint(), чтобы отобразить объект, можно ли это обойти и одной или несколькими строчками описать?
Ответить
|
Номер ответа: 2 Автор ответа: EROS
Вопросов: 58 Ответов: 4255
|
Профиль | | #2
|
Добавлено: 16.11.08 18:00
|
А нельзя в конструкторе вызывать Paint?
Разумеется нет.. Paint надо вызывать при каждой перерисовки формы..
FIX , архитектура класса в корне не верна. При таком подходе ты с перерисовкой замучаешься.
имхо.. правильней было бы сделать так..
-
- using System;
- using System.Collections.Generic;
- using System.Drawing;
- using System.Windows.Forms;
-
- namespace WindowsFormsApplication1
- {
- public partial class Form1 : Form
- {
- List<Shape> shapes = null;
- Color[] colors = new Color[] { Color.Red, Color.Yellow, Color.Green, Color.Blue };
- Random rnd = new Random(DateTime.Now.Millisecond);//randomize with seed
-
- public Form1()
- {
- InitializeComponent();
- InitShapes();
- }
-
- void InitShapes()
- {
- shapes = new List<Shape>();
- for (int i = 0; i < 100; i++)
- {
- int x = rnd.Next(Width);
- int y = rnd.Next(Height);
- Rectangle rect = new Rectangle(x, y, 50, 50);
- Color color = colors[rnd.Next(colors.Length)];
- /* create new instance */
- Shape shape = new Shape(rect, color);
- /* add paint handler to shape */
- this.Paint += new PaintEventHandler(shape.Paint);
- shapes.Add(shape);
- }
- }
-
- protected override void OnClick(EventArgs e)
- {
- base.OnClick(e);
- foreach (Shape shape in shapes)
- shape.Rect = new Rectangle(rnd.Next(Width), rnd.Next(Height), 50, 50);
- this.Invalidate();
- }
- }
-
- /// <summary>
- /// Test shape class
- /// </summary>
- public class Shape
- {
- Color color = Color.Empty;
-
- public Shape(Rectangle rect, Color color)
- {
- _Rectangle = rect;
- this.color = color;
- }
-
- private Rectangle _Rectangle = Rectangle.Empty;
- public Rectangle Rect
- {
- get { return _Rectangle; }
- set { _Rectangle = value; }
- }
-
-
- public virtual void Paint(object sender, PaintEventArgs e)
- {
- e.Graphics.FillRectangle(new SolidBrush(color), Rect);
- }
- }
- }
Набросал небольшой пример реализации Paint у дочерних объектов.. я думаю общая концепция понятна будет.
Ответить
|
Страница: 1 |
Поиск по форуму