Как получить доступ к таймеру из другого класса в C # - PullRequest
0 голосов
/ 07 апреля 2009

См. Также: Как включить таймер из другого потока / класса

Таймер назначен форме, и я хотел бы включить его в определенном месте, но из другого класса. Я не хочу делать его общедоступным

Это код, который я использую для доступа к заметке

    public string TextValue
    {
        set
        {
            if (this.Memo.InvokeRequired)
            {
                this.Invoke((MethodInvoker)delegate
                {
                    this.Memo.Text += value + "\n";
                });
            }
            else
            {
                this.Memo.Text += value + "\n";
            }
        }
    }

    public static void addtxt(string txt)
    {
        var form = Form.ActiveForm as Form1;
        if(form != null)
            form.TextValue = txt;
    }

Ответы [ 4 ]

3 голосов
/ 07 апреля 2009

Если вы не хотите предоставлять сам таймер, предоставьте метод или свойство public, которые можно вызвать, чтобы включить таймер. Очевидно, что для Form, который включает таймер, потребуется ссылка на Form, которому принадлежит Timer.

2 голосов
/ 07 апреля 2009

Как бы вы хотели включить таймер? Какие действия предпринимаются для его включения?

Можно ли добавить событие в класс, из которого вы хотите включить таймер, и в форме, содержащей таймер, подписаться на это событие? В обработчике этого события вы можете включить таймер.

Когда другой класс вызывает событие, обработчик событий включит таймер.

public class SomeOtherClassThatDoesStuff
{
   public event EventHandler SomethingHappened;

   public void DoStuff()
   {
      ...
      if( SomethingHappened != null )
         SomethingHappened;
      ...
   }
}

public class Form1
{

    private void Button1_Click(object sender, EventArgs e )
    {

      SomeOtherClassThatDoesStuff o = new SomeOtherClassThatDoesStuff();
      o.SomethingHappened += new EventHandler(EnableTimer);

      o.DoStuff();
    }

    private void EnableTimer(object sender, EventArgs e )
    {
       myTimer.Enabled = true;
    }
}

Как то так. (Я не проверял и даже не компилировал его, но я думаю, что вы поймете дрейф :)).

1 голос
/ 07 апреля 2009

Сделайте таймер «внутренним», тогда он будет доступен другим классам в сборке.

0 голосов
/ 07 апреля 2009

Вы можете добавить метод доступа для включения таймера, это позволит вам сохранить таймер закрытым, но сделает метод общедоступным, будет ли это работать?

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

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