Использовать значение из пользовательского элемента управления в главной форме (C #) - PullRequest
0 голосов
/ 03 декабря 2010

У меня есть форма Windows (C #), которая динамически генерирует копии пользовательского элемента управления.Каждый из дочерних пользовательских элементов управления имеет таймер.

Я хотел бы подвести итог на главной форме общего времени, потраченного всеми пользовательскими элементами управления (сумма всех таймеров).Каков был бы лучший способ сделать это?Как я могу заставить пользовательские элементы управления «отправлять» свои значения таймера в основную форму?

спасибо!

Ответы [ 3 ]

3 голосов
/ 03 декабря 2010
MyForm.Controls.OfType<MyCustomControlType>().Sum(c => c.TimeTakenProperty)

Обратите внимание, что если вы пытаетесь подсчитать, сколько времени требуется для выполнения, вам может потребоваться System.Diagnostics.StopWatch, а не Timer.

1 голос
/ 03 декабря 2010

Другой подход заключается в реализации какого-то шаблона наблюдателя , в C # его легко реализовать с помощью делегатов . Сначала создайте делегата с нужной вам подписью, затем включите событие вашего типа делегата, а затем вызовите событие, когда произойдет управляющее событие вашего пользователя. Каждый раз, когда вы создаете экземпляр вашего Usercontrol, ассоциируйте объявленное вами событие с каким-либо методом (наблюдателем) на вашем клиенте (в соответствии с подписью вашего делегата).

public delegate void MyUserControlEvent(UserControl control, object sender, EventArgs e);

public partial class MyUserControl : UserControl
{
    public event MyUserControlEvent TheEvent;

    private void TimerFecha_Tick(object sender, EventArgs e)
    {
        if (TheEvent != null) { TheEvent(this, sender, e); }
    }
}

public partial class SomeClient : SomeBase
{
    public SomeClient()
    {       
        MyUserControl control = new MyUserControl();
        control.TheEvent = TheListenerProcedure;
    }

    public void TheListenerProcedure(UserControl control, object sender, EventArgs e)
    {
        /* IMPLEMENT LOGIC HERE */
    }   
}
1 голос
/ 03 декабря 2010

Ваш пользовательский элемент управления может предоставить свойство TimeSpent, которое будет суммироваться в форме Windows

Внутри вашего пользовательского элемента управления добавьте свойство TimeSpent, где вы возвращаете значение таймера

public long TimeSpent 
{
    get { return getTimeSpent(); }
}

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

функция getTimeSpent() должна сделать именно это

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