C #: изменение кнопки BackColor не имеет никакого эффекта - PullRequest
4 голосов
/ 20 августа 2011

У меня проблема с кнопками C # в Windows Forms.

Я создал несколько кнопок программным способом и впоследствии добавил их в форму.

Интересно, что каждая модификация этих кнопок (расположение и размер), за исключением модификации 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();

        }
    }

Идеи кого-нибудь?

Подобный вопрос был задан здесь , но ответы на него были не очень полезны:

  • Попытка использовать Invoke дает мне ошибку во время выполнения, что DispWin еще не создан.
  • Установка UseVisualStyleBackColor в false ничего не меняет.
  • Установка BackColor и ForeColor или Отображение DispWin только после добавления и форматирования кнопок также не оказали влияния.

Куда я иду не так?

Ответы [ 3 ]

8 голосов
/ 20 августа 2011

Вы пытаетесь настроить цвет, но затем перезаписываете его, говоря: UseVisualStyleBackColor = true

, если вы хотите использовать свой собственный цвет, вам нужно установить UseVisualStyleBackColor на false или цветбудет применяться только к кнопке при наведении мыши.

простой тест загружен на 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));
    }
}

результат

enter image description here

2 голосов
/ 23 декабря 2015

Если для кнопки FlatStyle установлено значение System, она не будет отображать какой-либо задний цвет, вместо этого используйте задний цвет из шаблона системных цветов.

1 голос
/ 09 мая 2014

Убедитесь, что у вас не установлен BackgroundImage. Это переопределяет BackColor.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...