我在Windows窗体中创建了一个圆形按钮。按钮很好。唯一的问题是,我希望它是一个不同的颜色的背景,所以我设置BackColor为goldenRod。然而,它只是在圆形按钮周围创建了一个“goldenRod”立方体.
public MainForm(){
InitializeComponent();
myButtonObject start = new myButtonObject();
EventHandler myHandler = new EventHandler(start_Click);
start.Click += myHandler;
start.Location = new System.Drawing.Point(5, 5);
start.Size = new System.Drawing.Size(101, 101);
start.BackColor=System.Drawing.Color.Goldenrod;
this.Controls.Add(start);
`}
void start_Click(Object sender, System.EventArgs e)
{
MessageBox.Show("Start");
}
public class myButtonObject : UserControl
{
// Draw the new button.
protected override void OnPaint(PaintEventArgs e)
{
Graphics graphics = e.Graphics;
Pen myPen = new Pen(Color.Black);
// Draw the button in the form of a circle
graphics.DrawEllipse(myPen, 0, 0, 100, 100);
myPen.Dispose();
}
}
2条答案
按热度按时间11dmarpk1#
您需要在
OnPaint()
方法中填充正在绘制的Ellipse
。然后确保从
MainForm()
构造函数中删除start.BackColor
属性。jgwigjjp2#
BackColor将根据提供的
Size
和Location
更改用户控件矩形的颜色。正如Evan所说,你需要使用FillEllipse
来创建一个填充的圆-DrawEllipse
只绘制圆的轮廓。这里是一个完整的解决方案,以“圆形按钮”的问题,结合OP的形式与埃文的答案和悬停事件的处理。
将鼠标悬停在圆上后,光标变为手形,圆的颜色也随之改变:
备注
有很多细微的差别,我不得不实验发现:
OnPaint
方法中椭圆的x/y位置是相对于圆的,而不是相对于窗口的。Refresh()
来立即重绘-参见this SO answer。width
和height
需要比完整尺寸小1个像素,以防止轮廓被切断。