В C#, как я могу динамически менять цвет сплошной кисти с помощью числового управления вниз?

Вот код, который я использую:

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Forms;

    namespace Colors_Form
    {
        public partial class Form1 : Form
        {
            public int RedValue;
            public int GreenValue;
            public int BlueValue;
            public SolidBrush sb = new SolidBrush(Color.FromArgb(255, 0, 0, 0));
            public Form1()
            {
                InitializeComponent();
            }

            private void Form1_Paint(object sender, PaintEventArgs e)
            {
                Graphics g = e.Graphics;
                RedValue = (int)RedNumBox.Value;
                GreenValue = (int)GreenNumBox.Value;
                BlueValue = (int)BlueNumBox.Value;

                //SolidBrush sb = new SolidBrush(Color.FromArgb(255, RedValue, GreenValue, BlueValue ));
                g.FillRectangle(sb, 10, 150, 300, 200);
            }

            private void RedNumBox_ValueChanged(object sender, EventArgs e)
            {
                sb = new SolidBrush(Color.FromArgb(255, RedValue, GreenValue, BlueValue));


            }

            private void GreenNumBox_ValueChanged(object sender, EventArgs e)
            {
                GreenValue = (int)GreenNumBox.Value;
                sb = new SolidBrush(Color.FromArgb(255, RedValue, GreenValue, BlueValue));
            }

            private void BlueNumBox_ValueChanged(object sender, EventArgs e)
            {
                BlueValue = (int)GreenNumBox.Value;
                sb = new SolidBrush(Color.FromArgb(255, RedValue, GreenValue, BlueValue));
            }
        }
    }

То, что я пытаюсь сделать, это заставить сплошную кисть менять цвет, когда срабатывает событие "valueaged". К сожалению, у меня не получилось. Я пробовал варианты на:

    sb = sb.Color(Color.FromArgb(255,RedValue, GreenValue, BlueValue));

но этот код также не работает. Я поместил твердую кисть глобально, чтобы к ней мог получить доступ любой созданный метод. Я искал повсюду и не могу найти никаких инструкций по обновлению цвета, и все, что я вижу, это "новая кисть", и теперь я не уверен, как поступить. Я ценю любую помощь.

1 ответ

Вы должны переместить кисть в событие рисования и удалить глобальную переменную. SolidBrush следует утилизировать после завершения. Лучше сделать это в одном месте, чем все события изменений.

using (SolidBrush sb = new SolidBrush(Color.FromArgb(255, RedValue, GreenValue, BlueValue )))
        {
            g.FillRectangle(sb, 10, 150, 300, 200);
        }
Другие вопросы по тегам