[英]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.