我在Windows窗体中遇到C#按钮问题。
我以编程方式创建了许多按钮,然后将它们添加到表单中。
有趣的是,除了修改BackColor
之外,对这些按钮(位置和大小)的每次修改都很容易执行。只有按钮的颜色保持不变。
代码看起来像这样:
public class SimpleSortAlgDisplayer : ISortAlgDisplayer
{
#region ISortAlgDisplayer Member
void ISortAlgDisplayer.Init(int[] Data)
{
this.DataLength = Data.Length;
this.DispWin = new CurrentSortStateWin();
this.DispWin.Show();
this.DispWin.Size = new Size(60 + (10 * this.DataLength), 120);
this.myArrayElements = new Button[this.DataLength];
for (int i = 0; i < this.DataLength; i++)
{
this.myArrayElements[i] = new Button();
//begin of series of invoked actions
this.myArrayElements[i].Size=new Size(5,(int)(((80)*(double)Data[i])/1000));
this.myArrayElements[i].Location = new Point(30 + (i * 10), 90-(this.myArrayElements[i].Size.Height));
this.myArrayElements[i].Enabled = true;
this.myArrayElements[i].BackColor = Color.MidnightBlue;
this.myArrayElements[i].UseVisualStyleBackColor = true;
this.DispWin.Controls.Add(this.myArrayElements[i]);
this.myArrayElements[i].Refresh();
}
}
任何人的想法?
提出了一个类似的问题here,但答案并不是很有帮助:
Invoke
为我提供了尚未创建DispWin
的运行时错误。 UseVisualStyleBackColor
设置为false不会改变任何内容。 BackColor
和ForeColor
或显示DispWin
也无效。我哪里错了?
答案 0 :(得分:8)
您正在尝试设置颜色,但是然后您将其覆盖为UseVisualStyleBackColor = true
如果您想使用自定义颜色,则需要将UseVisualStyleBackColor
设置为false
,否则只有在鼠标悬停时才会将颜色应用于按钮。
一个简单的测试uploaded to GitHub
public partial class mainForm : Form
{
Random randonGen = new Random();
public mainForm()
{
InitializeComponent();
}
private void mainForm_Load(object sender, EventArgs e)
{
populate();
}
private void populate()
{
Control[] buttonsLeft = createButtons().ToArray();
Control[] buttonsRight = createButtons().ToArray();
pRight.Controls.AddRange(buttonsRight);
pLeft.Controls.AddRange(buttonsLeft);
}
private List<Button> createButtons()
{
List<Button> buttons = new List<Button>();
for (int i = 1; i <= 5; i++)
{
buttons.Add(
new Button()
{
Size = new Size(200, 35),
Enabled = true,
BackColor = GetColor(),
ForeColor = GetColor(),
UseVisualStyleBackColor = false,
Left = 20,
Top = (i * 40),
Text = String.Concat("Button ", i)
});
}
return buttons;
}
private Color GetColor()
{
return Color.FromArgb(randonGen.Next(255), randonGen.Next(255), randonGen.Next(255));
}
}
结果
答案 1 :(得分:2)
如果按钮的FlatStyle
设置为System
,则不会显示任何背景颜色,而是使用系统颜色模板中的背景颜色。
答案 2 :(得分:1)
确保没有设置BackgroundImage。这会覆盖BackColor。
答案 3 :(得分:0)
在Button的属性窗口中。查找“ FlatStyle”属性并将其从“系统”更改为“平面”,“标准”或“弹出”,您将能够看到按钮颜色的变化。我刚刚解决了这个问题。