Почему won' t этот код работает на грузе, только по щелчку кнопки?

У меня есть следующий инструмент. Задавание в основании загружается от XML-файла. Я не могу обратиться, градиенты к задает (маркирует) на грузе, хотя, только когда кнопка призывает код.

Посмотрите ниже на грузе, и по щелчку кнопки:

CSSGM1 CSSGM2

Форму называют Главной, и соответствующий код похож на это:

private void Main_Load(object sender, EventArgs e)
{
    Stop1.BackColor = Gradient.ForeColor;
    Stop2.BackColor = Gradient.BackColor;
    Populate(Gradient.ForeColor);

   //If xml exists etc snipped
    XmlDoc = XDocument.Load("palette.xml");

    IEnumerable cssGM = XmlDoc.Root.Elements();
    Label[] Label = new Label[cssGM.Count()];

    for(int i = 0; i < cssGM.Count(); i++)
    {
        Label[i] = new Label();
        Label[i].Name = "Saved" + i.ToString();
        Label[i].ForeColor = ColorTranslator.FromHtml(cssGM.ElementAt(i).Elements().ElementAt(0).Elements().ElementAt(1).Value);
        Label[i].BackColor = ColorTranslator.FromHtml(cssGM.ElementAt(i).Elements().ElementAt(1).Elements().ElementAt(1).Value);
        Label[i].BorderStyle = BorderStyle.FixedSingle;
        Label[i].Location = new System.Drawing.Point(i*54+2, 0);
        Label[i].Size = new System.Drawing.Size(50, 50);
        SavedPanel.Controls.Add(Label[i]);
        //FillGradient(Label[i]);
        //Label[i].Invalidate();
        //SavedPanel.Refresh();
    }

    FillPalettes();
    //Application.DoEvents();
    //this.Invalidate();
}

public void FillPalettes()
{
    foreach(Label Palette in this.SavedPanel.Controls.OfType

0
nl ja de
@Sahuagin Да it' s зацепленный до события.
добавлено автор Danny Beckett, источник
Main_Load на самом деле зацеплен в событие Груза формы? (также вместо того, чтобы зацепить ваш собственный object' s события, вы могли отвергнуть метод OnXXX вместо этого.)
добавлено автор Dave Cousineau, источник
Main_Load на самом деле зацеплен в событие Груза формы? (также вместо того, чтобы зацепить ваш собственный object' s события, вы могли отвергнуть метод OnXXX вместо этого.)
добавлено автор Dave Cousineau, источник

4 ответы

Или, создайте свой собственный класс, который наследует от стандарта Этикетку :

public class GradientLabel : Label {
    protected override void OnPaint(PaintEventArgs e) {
        e.Graphics.FillRectangle(new LinearGradientBrush(new Point(0, 0), new Point(0, this.Height), this.ForeColor, this.BackColor), ClientRectangle);
    }
}

Затем это будет постоянно оттягиваться. Каждый раз, когда вы изменяете любого BackColor или ForeColor собственность GradientLabel , это обновит отдельно:

gradientLabelInstance.BackColor = Color.Green;
1
добавлено
Это работает отлично, и это объясняет простым способом, как я могу закодировать продвижения также. Большое спасибо Саймон
добавлено автор Danny Beckett, источник
Спасибо за предложение Саймон, I' ll определенно имеют это в виду! У меня есть много идей того, куда пойти отсюда. Что-то большее, чем просто маленький производитель градиента;)
добавлено автор Danny Beckett, источник
Вам рады:) Я интересовался бы помощью с этим небольшим приложением от имени моих друзей проектировщика/фронтэнда, если вы ищете его:)
добавлено автор Simon Whitehead, источник

Или, создайте свой собственный класс, который наследует от стандарта Этикетку :

public class GradientLabel : Label {
    protected override void OnPaint(PaintEventArgs e) {
        e.Graphics.FillRectangle(new LinearGradientBrush(new Point(0, 0), new Point(0, this.Height), this.ForeColor, this.BackColor), ClientRectangle);
    }
}

Затем это будет постоянно оттягиваться. Каждый раз, когда вы изменяете любого BackColor или ForeColor собственность GradientLabel , это обновит отдельно:

gradientLabelInstance.BackColor = Color.Green;
1
добавлено
Это работает отлично, и это объясняет простым способом, как я могу закодировать продвижения также. Большое спасибо Саймон
добавлено автор Danny Beckett, источник
Спасибо за предложение Саймон, I' ll определенно имеют это в виду! У меня есть много идей того, куда пойти отсюда. Что-то большее, чем просто маленький производитель градиента;)
добавлено автор Danny Beckett, источник
Вам рады:) Я интересовался бы помощью с этим небольшим приложением от имени моих друзей проектировщика/фронтэнда, если вы ищете его:)
добавлено автор Simon Whitehead, источник

Форма , Нагруженный , событие запущено, прежде чем Форма выложена, возможно все средства управления еще не готовы.

Вы могли попытаться использовать , Показанный событие, поскольку все средства управления должны быть готовы к тому времени.

    private void Main_Shown(object sender, EventArgs e)
    {
       //all your code;
    }

насколько я помню с good'ol дней winform, события, находятся в этом заказе

  1. , Нагруженный
  2. CreateControl
  3. OnActivated
  4. Показан
  5. OnPaint

и необходимо ждать CreateControl событие, чтобы создать ваш SavedPanel , так , Показанный , событие должно быть прекрасным.

0
добавлено
Используя , Показанный , у события есть тот же самый результат. Примите во внимание, этикетки градиента создаются программно в для (интервал i = 0; я петля. Я предполагаю, что это имеет некоторое отношение к нему.
добавлено автор Danny Beckett, источник

Форма , Нагруженный , событие запущено, прежде чем Форма выложена, возможно все средства управления еще не готовы.

Вы могли попытаться использовать , Показанный событие, поскольку все средства управления должны быть готовы к тому времени.

    private void Main_Shown(object sender, EventArgs e)
    {
       //all your code;
    }

насколько я помню с good'ol дней winform, события, находятся в этом заказе

  1. , Нагруженный
  2. CreateControl
  3. OnActivated
  4. Показан
  5. OnPaint

и необходимо ждать CreateControl событие, чтобы создать ваш SavedPanel , так , Показанный , событие должно быть прекрасным.

0
добавлено
Используя , Показанный , у события есть тот же самый результат. Примите во внимание, этикетки градиента создаются программно в для (интервал i = 0; я петля. Я предполагаю, что это имеет некоторое отношение к нему.
добавлено автор Danny Beckett, источник
Microsoft Stack Jobs
Microsoft Stack Jobs
1 788 участник(ов)

Work & freelance only Microsoft Stack. Feed https://t.me/Microsoftstackjobsfeed Чат про F#: @Fsharp_chat Чат про C#: @CSharpChat Чат про Xamarin: @xamarin_russia Чат общения:@dotnettalks

Microsoft Developer Community Chat
Microsoft Developer Community Chat
584 участник(ов)

Чат для разработчиков и системных администраторов Microsoft Developer Community. __________ Новостной канал: @msdevru __________ Баним за: оскорбления, мат, рекламу, флуд, флейм, спам, NSFW контент, а также большое количество оффтоп тем. @banofbot