В 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);
}