如何从另一个组合框(C#,Winforms)更改形状的颜色

如何从另一个组合框(C#,Winforms)更改形状的颜色,c#,winforms,combobox,C#,Winforms,Combobox,所以我要做的就是用另一个组合框来改变形状的颜色。因此,第一个组合框表示将显示为图像的形状。例如,如果我按下三角形选项,它将显示三角形。嗯,我有另一个组合框,显示形状的颜色。到目前为止,我的代码如下所示: using System; using System.Drawing; using System.Windows.Forms; namespace ComboBoxTest { // Form uses a ComboBox to select different shapes to

所以我要做的就是用另一个组合框来改变形状的颜色。因此,第一个组合框表示将显示为图像的形状。例如,如果我按下三角形选项,它将显示三角形。嗯,我有另一个组合框,显示形状的颜色。到目前为止,我的代码如下所示:

  using System;
using System.Drawing;
using System.Windows.Forms;

namespace ComboBoxTest
{
   // Form uses a ComboBox to select different shapes to draw
   public partial class ComboBoxTestForm : Form
   {
      // constructor
      public ComboBoxTestForm()
      {
         InitializeComponent();

      } // end constructor
      Pen myPen;
      SolidBrush mySolidBrush;


      private void imageComboBox_SelectedIndexChanged(
         object sender, EventArgs e )
      {


         // create graphics object, Pen and SolidBrush
         Graphics myGraphics = base.CreateGraphics();

         // create Pen using color DarkRed


         // create SolidBrush using color DarkRed


         // clear drawing area setting it to color white
         myGraphics.Clear( Color.White );

         // find index, draw proper shape
         switch ( imageComboBox.SelectedIndex )
         {
            case 0: // case Circle is selected
               myGraphics.DrawEllipse( myPen, 50, 50, 150, 150 );
               break;
            case 1: // case Rectangle is selected
               myGraphics.DrawRectangle( myPen, 50, 50, 150, 150 );
               break;
            case 2: // case Ellipse is selected
               myGraphics.DrawEllipse( myPen, 50, 85, 150, 115 );
               break;
            case 3: // case Pie is selected
               myGraphics.DrawPie(myPen, 50, 50, 150, 150, 0, 45 );
               break;
             case 4:
                Point point1 = new Point(150,  50);
                Point point2 = new Point(100,  150);
                Point point3 = new Point(200,   150);

                Point[] curvePoints =
                         {
                             point1,
                             point2,
                             point3,
                         };

                myGraphics.DrawPolygon(myPen, curvePoints);
               break;
             case 5: // case Filled Circle is selected
               myGraphics.FillEllipse( mySolidBrush, 50, 50, 150, 150 );
               break;
            case 6: // case Filled Rectangle is selected
               myGraphics.FillRectangle( mySolidBrush, 50, 50, 150, 
                  150 );
               break;
            case 7: // case Filled Ellipse is selected
               myGraphics.FillEllipse( mySolidBrush, 50, 85, 150, 115 );
               break;
            case 8: // case Filled Pie is selected
               myGraphics.FillPie( mySolidBrush, 50, 50, 150, 150, 0, 
                  45 );
               break;
             case 9:
                  Point point4 = new Point(150,  50);
                Point point5 = new Point(100,  150);
                Point point6 = new Point(200,   150);

                Point[] curvePoints2 =
                         {
                             point4,
                             point5,
                             point6,
                         };
               myGraphics.FillPolygon(mySolidBrush, curvePoints2);
               break;
         } // end switch

         myGraphics.Dispose(); // release the Graphics object

      }

      private void ComboBoxTestForm_Load(object sender, EventArgs e)
      {

      }

      private void colorComboBox_SelectedIndexChanged(object sender, EventArgs e)
      {

          switch (colorComboBox.SelectedIndex)
          {
              case 0:
                  myPen = new Pen(Color.Black);
                   mySolidBrush = new SolidBrush(Color.Black);
                  break;
          }
      }

      // end method imageComboBox_SelectedIndexChanged
   } // end class ComboBoxTestForm
} 

我试图做的是在虚空之外调用myPen,这样就可以在控制颜色的第二个虚空中调用它。Mysolidbrush表示形状的填充。在第二个空白处,我试着把我的钢笔称为黑色,但我没有看到任何变化。我想知道我应该采取什么步骤,使它显示出我想要的颜色

您可以将所有绘制逻辑放入表单的
paint
事件中,然后在
SelectedIndexChanged
事件中,只需调用
this.Invalidate()

同样,在当前代码中,虽然您已将
myPen
mySolidBrush
定义为类成员,但从未初始化它们。在
colorComboBox\u SelectedIndexChanged
中,您分配的是局部变量,而不是类成员

myPen = new Pen(Color.Black);
mySolidBrush = new SolidBrush(Color.Black);

此外,在当前代码中,您已将所有绘制逻辑放入
imageComboBox\u SelectedIndexChanged
中,即使您更正了
colorComboBox\u SelectedIndexChanged
中的代码,并将值分配给类成员
myPen
mySolidBrush
,绘图的颜色将仅为下一个形状更改。

将所有绘制逻辑放入
paint
事件中,然后在
SelectedIndexChanged
事件中,只需调用
this.Invalidate()也在当前代码中,虽然您已将
myPen
mySolidBrush
定义为类成员,但从未初始化它们。在
colorComboBox\u SelectedIndexChanged
中,您分配的是局部变量,而不是类成员。对不起,我对GUI非常陌生,您能演示一下这是如何完成的吗?我为您共享了一些伪代码,按照您的要求描述注释。希望对您有所帮助:)别忘了为事件指定处理程序。我对绘制事件并不太熟悉,所以有没有其他方法可以调用myPen?对于第二个空格,我要做的是让案例0识别myPen,然后更改第一个空格的颜色。我只需要初始化我的画笔吗?如果你想学习画画,你应该学会使用
Paint
event。无论如何,您应该知道您已经将所有绘制逻辑放入了
imageComboBox\u SelectedIndexChanged
中,即使您在
colorComboBox\u SelectedIndexChanged
中更正了代码并将值分配给您的类成员
myPen
mySolidBrush
,图形的颜色将仅为下一个形状更改。是否需要在空白外部和第二个空白中对其进行初始化?在
colorComboBox\u SelectedIndexChanged
中,您不应声明局部变量,您只应指定值,就像我在回答中所做的那样。我确实这样做了,但颜色不会更改
myPen = new Pen(Color.Black);
mySolidBrush = new SolidBrush(Color.Black);