Динамически установить PaintEventArgs на меткеC#

Место общения программистов C#
Ответить
Anonymous
 Динамически установить PaintEventArgs на метке

Сообщение Anonymous »

Обновляю вопрос, чтобы получить больше информации
Я пытаюсь установить цвет некоторых кругов на основе значений данных внутри объекта.
У меня есть следующий класс:

Код: Выделить всё

public class Monster {
public int Stat1 {get; set;}
public int Stat2 {get; set;}
public int Stat3 {get; set;}
}
В методе моего класса формы я установил значения для статистики 1,2,3:

Код: Выделить всё

namespace Game
{
public partial class MonsterModel : Form
{
public PokedexModel(string pokemon, List
 p)
{
InitializeComponent();
}
private async void PopulateData(string name)
{
Monster m = new Monster();
m = LoadStats(name);
}
}
}
Отсюда я могу получить доступ к статистике, вызвав m.Stat1 и т. д.
Теперь у меня есть следующие три метки, используя Paint событие:

Код: Выделить всё

        private void label1_Paint(object sender, PaintEventArgs e)
{
SolidBrush solidBrush = new SolidBrush(Color.FromArgb(0, 0, 0, 0));
e.Graphics.FillEllipse(solidBrush, 0, 0, 30, 30);
}

Код: Выделить всё

        private void label2_Paint(object sender, PaintEventArgs e)
{
SolidBrush solidBrush = new SolidBrush(Color.FromArgb(0, 0, 0, 0));
e.Graphics.FillEllipse(solidBrush, 0, 0, 30, 30);
}

Код: Выделить всё

        private void label1_Paint(object sender, PaintEventArgs e)
{
SolidBrush solidBrush = new SolidBrush(Color.FromArgb(0, 0, 0, 0));
e.Graphics.FillEllipse(solidBrush, 0, 0, 30, 30);
}
Я хотел бы иметь возможность делать что-то вроде этого:

Код: Выделить всё

        private void label1_Paint(object sender, PaintEventArgs e)
{
if (m.Stat1 < 100)
SolidBrush solidBrush = new SolidBrush(Color.FromArgb(255, 255, 0, 0));
e.Graphics.FillEllipse(solidBrush, 0, 0, 30, 30);
}
У меня есть несколько способов сделать это.
Вариант 1 – создать экземпляр m на более высоком уровне:

Код: Выделить всё

namespace Game
{
public partial class MonsterModel : Form
{
Monster m = new Monster();
public PokedexModel(string pokemon, List
 p)
{
InitializeComponent();
}
private async void PopulateData(string name)
{
m = LoadStats(name);
}
}
}
Вариант 2 — обновить PopulateData():

Код: Выделить всё

        private async void PopulateData(string name)
{
m = LoadStats(name);
if (m.Stat1 < 100) {
label1.Paint += (sender, e) =>
{
SolidBrush solidBrush = new SolidBrush(Color.FromArgb(255, 255, 0, 0));
e.Graphics.FillEllipse(solidBrush, 0, 0, 30, 30);
};

label1.Invalidate();
}
}

Есть ли лучший способ сделать это?

Подробнее здесь: https://stackoverflow.com/questions/790 ... s-on-label
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»