Как поменять цвет овальной формы после нажатия на нее?
Так вот мой код, он работает с кнопкой, но он не работает с моим OvalShape. Мне это нужно для игры Master Mind в C#. Овальная форма должна изменить цвет после нажатия на нее. Предполагается, что он может измениться на 6 цветов: красный, желтый, синий, белый, зеленый и фиолетовый.
private void ovalShape1_4_Click(object sender, EventArgs e)
{
Control ctrl = ((Control)sender);
switch (ctrl.BackColor.Name)
{
case "Red":
ctrl.BackColor = Color.Yellow;
break;
case "Black":
ctrl.BackColor = Color.Green;
break;
case "White":
ctrl.BackColor = Color.Red;
break;
case "Yellow":
ctrl.BackColor = Color.Purple;
break;
default:
ctrl.BackColor = Color.Red;
break;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Microsoft.VisualBasic.PowerPacks;
namespace Mastermind2
{
public static class ControlCollectionExtension
{
public static IList<OvalShape> ToList(this ShapeCollection aiShapeCollection)
{
IList<OvalShape> aoShapes = new List<OvalShape>();
foreach (OvalShape ctrl in aiShapeCollection)
aoShapes.Add(ctrl);
return aoShapes;
}
}
}
2 ответа
Я предполагаю, что у вас нет обработчика события Click, назначенного элементам управления OvalShape.
foreach (OvalShape ctrl in aiShapeCollection)
ctrl.Click += ovalShape1_4_Click;
aoShapes.Add(ctrl);
Сделать общедоступной переменную
int index = 0;
после этого сделайте эту логику, может ли это помочь вам
private void ovalShape1_4_Click(object sender, EventArgs e)
{
OvalShape ctrl = ((OvalShape)sender);
switch (index)
{
case 0:
ctrl.BackColor = Color.Yellow;
break;
case 1:
ctrl.BackColor = Color.Green;
break;
case 2:
ctrl.BackColor = Color.Red;
break;
case 3:
ctrl.BackColor = Color.Purple;
break;
default:
ctrl.BackColor = Color.Red;
index = 0;
break;
}
}