Как изменить фоновый цвет для каждой динамически создаваемой метки после определенного таймера? WinForms c # - PullRequest
0 голосов
/ 15 октября 2019

У меня есть таблица, в которой есть метка и таймер, каждый раз создаваемый динамически. Поэтому, когда код выполняется, он создает таблицу, которая имеет свой собственный таймер и метку. Вопрос здесь в том, как изменить задний цвет каждой метки в зависимости от собственного таймера, созданного с ее помощью. Для большей ясности, например, я хочу, чтобы каждые 30 секунд менялся цвет, но проблема, с которой я сталкиваюсь, заключается в том, что он меняет задний цвет последней созданной метки.
Мой код:

public void Form1_Load()
{
    Label l6 = new Label();
    tpanel0 = new TableLayoutPanel();

    Action<Label> createTimer = l6 =>
    {
        timer.Tick += new EventHandler(OnTick);
        var timer = new System.Windows.Forms.Timer();
        timer.Interval = 1000;
        timer.Tick += (Sender, ee) => { l6.Text =DateTime.Now.Subtract(Timers[Sender as System.Windows.Forms.Timer]).ToString("mm\\:ss"); };
        timer.Interval = 1000;
        timer.Enabled = true;
        Timers.Add(timer, DateTime.Now);
    };
}

private void OnTick(object sender, EventArgs e)
{ 
    //I have tried a loop here but only change the color of the last created label

}

Ответы [ 2 ]

0 голосов
/ 15 октября 2019

Создание пользовательского пользовательского элемента управления и поддержание соединений друг с другом было бы наилучшим способом.

Однако, если это очень простое приложение, и вы не хотите делать из-за хлопотнастройте все это, затем попробуйте это.

В любой заданный отметка таймера найдите все метки в вашей форме и установите метку BackgroundColor

Это пример метода расширения для поиска всех элементов управления в вашей форме, которые являются метками.

public static IEnumerable<System.Windows.Forms.Control> GetAllControlsOfType(this System.Windows.Forms.Control control, Type type)
        {
            var controls = control.Controls.Cast<System.Windows.Forms.Control>();

            return controls.SelectMany(ctrl => GetAllControlsOfType(ctrl, type))
                                      .Concat(controls)
                                      .Where(c => c.GetType() == type);
        }

private void OnTick(object sender, EventArgs e)
{ 
    var labels = this.GetAllControlsOfType(typeof(Label));
    foreach(var lb in labels){
    lb.BackgroundColor = //Set the BackgroundColor Property here 
    }
}
0 голосов
/ 15 октября 2019

Возможно, вам нужно узнать о реактивном пользовательском интерфейсе, который помогает вам создавать формы, динамически изменяющие их содержимое в режиме реального времени. https://github.com/reactiveui/ReactiveUI

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