Почему в таблице свойств не отображается правильный цвет? - PullRequest
0 голосов
/ 14 мая 2019

У меня есть сетка свойств, и всякий раз, когда я щелкаю прямоугольник на панели, он показывает свойства прямоугольника. Все свойства верны, кроме цвета, который всегда остается по умолчанию (белый). Мне было интересно, есть ли способ для сетки свойств показать цвет прямоугольника.

Вот скриншот того, как это выглядит в настоящее время:
example screenshot

Вот как я создаю прямоугольник:
Это из моего прямоугольника класса

internal class rectangle : Shape
{
        public int length { get; set; }
        public int width { get; set; }

        Random rand = new Random();
        Rectangle newRectangle;

        public override Rectangle GetRectangle()
        {
            return this.newRectangle;
        }

        private Color randomColor()
        {
            int r = rand.Next(0, 256); // Random number between 0 - 255
            int g = rand.Next(0, 256);
            int b = rand.Next(0, 256);

            Color color = Color.FromArgb(r, g, b);
            return color;
        }

        private Rectangle makeRectangle(int startx, int starty, int width, int length)
        {
            newRectangle = new Rectangle(startx, starty, width, length);
            return newRectangle;
        }

        public override void Draw(Graphics g)
        {
            using (SolidBrush brush = new SolidBrush(randomColor()))
            {
                g.FillRectangle(brush, makeRectangle(startx, starty, width, length));
            }
        }
}

И класс прямоугольника получен из Shape:

internal abstract class Shape
    {
        public Color color { get; set; }
        public int thickness { get; set; }
        public int startx { get; set; }
        public int starty { get; set; }

        public abstract Rectangle GetRectangle();   
        public virtual void Draw(Graphics g)
        {
        }
    }

А в основной форме я рисую прямоугольник:

// Rectangle 1 
List<Shape> shapes = new List<Shape>();
rectangle rectangle = new rectangle();
rectangle.startx = 100;
rectangle.starty = 200;
rectangle.width = 200;
rectangle.length = 100;
shapes.Add(rectangle);

rectangle.Draw(g);

Вот событие MouseClick для отображения свойств:

private void panel1_MouseClick(object sender, MouseEventArgs e)
{
            var currentPoints = e.Location;
            Boolean isRectangle = false;
            foreach (Shape shape in shapes)
            {
                if (shape.GetRectangle().Contains(currentPoints))
                {
                    isRectangle = true;
                    propertyGrid1.SelectedObject = shape;
                    objectType = shape.GetType();
                }
            }

            if (isRectangle)
            {
                //MessageBox.Show("This is a " + objectType);
                propertyGrid1.Show();

            }
}

Согласно предоставленному коду, я создаю SolidBrush со случайными цветами RGB. Поэтому я надеялся, что сетка свойств покажет правильный цвет. Спасибо!

1 Ответ

2 голосов
/ 14 мая 2019

Вы создаете случайный цвет для создания кисти в методе Draw, но вы не назначаете этот цвет любому свойству объекта, отображаемого в сетке свойств.

Вы должны назначитьэтот случайный цвет для объекта Shape или rectangle, который вы отображаете в сетке свойств.

rectangle rectangle = new rectangle();
rectangle.color = randomColor(); // <========================
rectangle.startx = 100;
rectangle.starty = 200;
rectangle.width = 200;
rectangle.length = 100;

В методе Draw вам следует использовать этот цвет

using (SolidBrush brush = new SolidBrush(this.color))
{
    g.FillRectangle(brush, makeRectangle(startx, starty, width, length));
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...