如何从另一个组合框(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);