如何在点击后切换椭圆形背景颜色?
问题描述:
这就是我的代码,它与一个按钮一起工作,但它不适用于我的OvalShape。我需要它在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;
}
}
}
答
使公共变量
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;
}
}
+0
这不起作用,除非点击事件也改变了'index'的值。由于有多个形状控件的实例,你需要定义多个'index'变量。我相信OP正试图使用控件的颜色属性来确定下一个应该是什么。 – Nicarus
+0
是的!你是对的,这对多个OvalShape不起作用。 –
答
我的猜测是,你必须分配给OvalShape控件没有Click事件处理程序。
foreach (OvalShape ctrl in aiShapeCollection)
ctrl.Click += ovalShape1_4_Click;
aoShapes.Add(ctrl);
是的,没错1次点击=例如红色,第二次点击=黄色...等等 – Texo
附加代码显示在您添加了处理程序的形状。 – Nicarus
你可以分享椭圆形类或控制 –