2016-03-08 83 views
2

这就是我的代码,它与一个按钮一起工作,但它不适用于我的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; 
     } 
    } 
} 
+0

是的,没错1次点击=例如红色,第二次点击=黄色...等等 – Texo

+0

附加代码显示在您添加了处理程序的形状。 – Nicarus

+0

你可以分享椭圆形类或控制 –

回答

0

使公共变量

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不起作用。 –

0

我的猜测是,你必须分配给OvalShape控件没有Click事件处理程序。

foreach (OvalShape ctrl in aiShapeCollection) 
     ctrl.Click += ovalShape1_4_Click; 
     aoShapes.Add(ctrl);