![](/img/trans.png)
[英]Error in C#: “An object reference is required for the non-static field, method, or property”
[英]C# Fixing error: “An object reference is required for the non-static field, method, or property”
我是C#(和編程)新手。 我有一個Windows商店應用程序,我想在其中執行倒數計時器計時的一些操作。 所以我嘗試在這里創建一個事件,結果代碼如下:
CountDownTimer.cs
public void timer_Tick(object sender, object e)
{
if (sw.Elapsed < duration)
{
Seconds = (int)(duration - sw.Elapsed).TotalSeconds;
TimeElapsed = String.Format("{0} second(s)", Seconds);
}
else
{
TimeElapsed = "Times Up";
timer.Stop();
Views.EquationView.OnTimesUp();
}
}
EquationView.xaml.cs
public event System.EventHandler TimesUp;
public void OnTimesUp()
{
if (TimesUp != null)
{
TimesUp(this, EventArgs.Empty);
submitButton.IsEnabled = true;
MessageDialog msgDialog = new MessageDialog("Your time's up which counts as a wrong answer. Click start for a new equation");
msgDialog.ShowAsync();
//more code
}
}
但是我得到了問題標題中提到的錯誤。 搜索MDSN和SO似乎我有兩個選擇
1) 將OnTimeSUp( ) 設置為靜態 ,然后submitBtn.IsEnabled = true; 給我一個錯誤。 我試圖將按鈕作為參數傳遞,但它不會
2)更改Views.EquationView.OnTimesUp();
到this.Views.EquationView.OnTimesUp();
或創建一個新實例 ,然后創建 instance.Views.EquationView.OnTimesUp()
; 仍然有問題
非常感謝您的幫助。 我也樂於接受有關更優雅,更高效的代碼的建議。
-更新-感謝A.Abramov,我不再遇到錯誤,但是除了顯示消息對話框和更新數據模型(第一行)之外,方法OnTimesUp()也不起作用。 當由其他方法調用時,其他行也會起作用。
CountDownTimer.cs
public void timer_Tick(object sender, object e)
{
if (sw.Elapsed < duration)
{
//code
}
else
{
//THE CHANGE
new Views.EquationView().OnTimesUp();
}
}
EquationView.xaml.cs
public void OnTimesUp()
{
App.player.AnsweredWronglyAsync();
AfterWrongAnswer();
submitButton.IsEnabled = false;
commandBarResetButton.IsEnabled = false;
MessageDialog timesUpMsg = new MessageDialog("Time's up!");
timesUpMsg.ShowAsync();
}
好吧好吧。 這不是典型的OOP問題,應該進一步解釋。 我想我會做的。
在您的程序中,您嘗試到達Views.EquationView.OnTimesUp();
從CountDownTimer類。 問題是,方程式視圖沒有針對所有對象的OnTimesUp(),而是對象特定的-因此C#不確定如何激活該函數。
如您所描述的,解決方案是-創建View.EquationView.OnTimesUp()的實例-這樣,該函數將在object中觸發。
您說這有問題,我說我們是在這里解決問題。 嘗試使用此代碼-如果輸入錯誤,請在編譯器消息中對此答案進行評論,然后我們將介紹如何解決它:)
public void timer_Tick(object sender, object e)
{
if (sw.Elapsed < duration)
{
Seconds = (int)(duration - sw.Elapsed).TotalSeconds;
TimeElapsed = String.Format("{0} second(s)", Seconds);
}
else
{
TimeElapsed = "Times Up";
timer.Stop();
new Views.EquationView().OnTimesUp();
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.