我想用C#在WindowsForm中创建一个按钮,按钮的一半填充红色(背景色),另一半填充蓝色(背景色),并将文本“ok”居中。
我不知道如何开始,所以我用了一个计时器来填充,10毫秒过去了,颜色。
但请注意,计时器不是什么是要求,只是一个按钮分为2种颜色。
但计时器的问题是图形的事情发生在按钮后面,但我需要它发生在按钮上,所以像按钮应该在背景而不是在前面。
所以我移动了按钮上方的计时器填充,这样你就能明白我的意思了。
因此:
1.如何修复下面与计时器想法相关的代码?(又名如何将按钮放在后台?)
1.还有其他办法吗?
这就是我目前所尝试的:
public Form1()
{
InitializeComponent();
}
Graphics g;
int y = 0; int x = 0;
private void Form1_Load(object sender, EventArgs e)
{
g = this.CreateGraphics();
}
private void button1_Click(object sender, EventArgs e)
{
timer1.Enabled = true;
}
private void timer1_Tick(object sender, EventArgs e)
{
this.Refresh();
g.FillRectangle(Brushes.Red, new Rectangle(new Point(button1.Location.X, button1.Location.Y-100), new Size(y,button1.Size.Height)));
if (y < (button1.Size.Width / 2))
y++;
else
{
g.FillRectangle(Brushes.Blue, new Rectangle(new Point(button1.Location.X+button1.Size.Width/2, button1.Location.Y - 100), new Size(x, button1.Size.Height)));
if (x < (button1.Size.Width/2))
x++;
}
}
2条答案
按热度按时间ijnw1ujt1#
这似乎是一个太复杂的方式来着色按钮。它总是一个坏主意,覆盖任何上面的控件。它可以干扰您的点击/事件等。
我也可以选择使用两种颜色的图像背景,如here所述
不幸的是,没有办法创建一个带有渐变值的
System.Drawing.Color
来解决您的问题,并将其分配给按钮的背景颜色属性,因此您最好的选择是图像背景。np8igboo2#
使用位图作为背景可能是最简单的方法。
您可以生成一个自定义控件,该控件生成一个用指定颜色填充的位图,并将其分配给Button的
BackGroundImage
属性。您还可以添加一个公共属性(这里是一个名为
Colors
的数组)来更改填充位图的颜色,该属性可以在设计时或运行时设置要使用此自定义控件,请向项目中添加一个类,将其命名为
ButtonBicolor
,用此代码替换所有内容,生成项目,在工具箱中找到新控件并将其放到窗体上注意:
Colors
属性(或设计工具)没有附加自订编辑器,因此您无法在PropertyGrid中设定单一值,您必须开启对话方块并确认变更,才能看到套用的新色彩