2012-04-12 1 views
0

У меня есть следующий код. Это форма с одним текстовым полем на ней. Если я делаю myTimer_Tick не статическим, тогда он отлично работает - почему?Почему статическая ошибка при попытке обновления текста текстового поля

namespace Ariport_Parking 
{ 
    public partial class AirportParking : Form 
    { 

    //instance variables of the form 
    static Timer myTimer; 


    public AirportParking() 
    { 
     InitializeComponent(); 
     keepingTime(5000); 
     txtMessage.Text = "hello"; 
    } 

    //method for keeping time 
    public void keepingTime(int howlong) { 

     myTimer = new Timer(); 
     myTimer.Enabled = true; 
     myTimer.Tick += new EventHandler(myTimer_Tick); 
     myTimer.Interval = howlong; 

     myTimer.Start(); 

    } 

    static void myTimer_Tick(Object myObject,EventArgs myEventArgs){ 
     myTimer.Stop(); 
     txtMessage.Text = "hello world"; 
    } 

    } 

} 
+1

первых, почему Вы хотите быть статичным? – Reniuz

+1

что не работает если * это * статический? – Tigran

+1

Какая ошибка? –

ответ

4

Я думаю, что Ошибка будет заключаться в том, что ее невозможно получить доступ к txtMessage. txtMessage - это переменная экземпляра, объявленная в форме, Static Method не имеет доступа к данным экземпляра формы. И вы можете узнать, почему.

+0

+1. абсолютная истина – Reniuz

+0

Я новичок в C# и не понимаю, что объекты на winform являются фактически переменными экземпляра - это объясняет вещи. – whytheq

+0

@Reniuz Я искал информацию и ушел [здесь] (http://msdn.microsoft.com/en-us/library/system.windows.forms.timer.tick.aspx) и скопировал квалификаторы для event _TimerEventProcessor_ в примере. Немного знаний опасно. – whytheq

1

Поскольку txtMessage не является статическим, ему нужен экземпляр класса для доступа. Вам не нужно ставить ваш myTimer_Tick и таймер. Или для хорошего использования лямбда вместо myTimer_Tick.

вместо:

myTimer.Tick += new EventHandler(myTimer_Tick); 

использования

myTimer.Tick += (sender, e) => { 
    myTimer.Stop(); 
    txtMessage.Text = "hello world"; 
}; 
+0

_Or для хорошего использования лямбда вместо myTimer_Tick._ что это значит? – whytheq

+0

@whytheq Просто отредактировал сообщение :) – AlexTheo

+0

Я предполагаю, что оператор '=>' это лямбда? – whytheq

Смежные вопросы