C# 非静态字段、方法或属性需要对象引用';TingTong.MainWindow.animategrid(字符串、字符串、字符串)和#x27;
我有两门课,如下所示 动画类:C# 非静态字段、方法或属性需要对象引用';TingTong.MainWindow.animategrid(字符串、字符串、字符串)和#x27;,c#,wpf,C#,Wpf,我有两门课,如下所示 动画类: namespace TingTong.View { public class AnimateUtils { public static void animategrid(string motion, ref DoubleAnimation slide, ref Grid grid, ref Grid grid2, ref Storyboard sbfade, ref Storyboard sbslide) {
namespace TingTong.View
{
public class AnimateUtils
{
public static void animategrid(string motion, ref DoubleAnimation slide, ref Grid grid, ref Grid grid2, ref Storyboard sbfade, ref Storyboard sbslide)
{
if (motion == "away")
{
slide.To = 310;
slide.From = 0;
}
else
{
slide.To = 0;
slide.From = 310;
}
switch (grid.Name)
{
case "GD_Lockscreen":
slide.Duration = new Duration(TimeSpan.FromMilliseconds(400.0));
Storyboard.SetTarget(slide, grid);
Storyboard.SetTargetProperty(slide, new PropertyPath("RenderTransform.(TranslateTransform.X)"));
sbfade.Children.Add(slide);
sbfade.Begin();
if (grid2.Name == "GD_Login")
{
slide.To = 0;
slide.From = 310;
slide.Duration = new Duration(TimeSpan.FromMilliseconds(400.0));
Storyboard.SetTarget(slide, grid2);
Storyboard.SetTargetProperty(slide, new PropertyPath("RenderTransform.(TranslateTransform.X)"));
sbslide.Children.Add(slide);
sbslide.Begin();
}
break;
case "GD_Login":
slide.Duration = new Duration(TimeSpan.FromMilliseconds(400.0));
Storyboard.SetTarget(slide, grid);
Storyboard.SetTargetProperty(slide, new PropertyPath("RenderTransform.(TranslateTransform.X)"));
sbfade.Children.Add(slide);
sbfade.Begin();
if (grid2.Name == "GD_Background")
{
slide.To = 310;
slide.From = 0;
slide.Duration = new Duration(TimeSpan.FromMilliseconds(800.0));
Storyboard.SetTarget(slide, grid2);
Storyboard.SetTargetProperty(slide, new PropertyPath("RenderTransform.(TranslateTransform.X)"));
sbslide.Children.Add(slide);
sbslide.Begin();
}
break;
}
}
}
}
}
第二类是:
namespace TingTong
{
public partial class MainWindow : Window
{
static void xmppCon_OnLogin(object sender)
{
System.Windows.MessageBox.Show("Logged in to server");
animategrid("loginscreen", "away", "backgroundimg"); <------error is shown here
}
}
但是,我得到以下错误:
Error:An object reference is required for the non-static field, method, or property 'TingTong.MainWindow.animategrid(string, string, string)' D:\TingTong\TingTong\MainWindow.xaml.cs 400 13 TingTong
尝试如下调用,因为animategrid(…)方法是在AnimateUtils类中编写的
AnimateUtils.animategrid("loginscreen", "away", "backgroundimg");
此外,如果尚未导入,您可能需要导入顶部的“TingTong.View”命名空间,如下图所示:
using TingTong.View;
编辑
仔细查看TingTong命名空间中的第二个类即MainWindow后,您必须将animategrid()方法签名更改为:
private static void animategrid(string grid, string motion, string withgrid)
或
您必须删除事件处理程序前面的'static'关键字:xmppCon_OnLogin(对象发送方)
不能从静态方法调用非静态/实例方法。在类主窗口中包括引用:
using TingTong.View;
主窗口中的功能应如下所示:
public partial class MainWindow : Window
{
static void xmppCon_OnLogin(object sender)
{
System.Windows.MessageBox.Show("Logged in to server");
animategrid("loginscreen", "away", "backgroundimg");
}
private void animategrid(string grid, string motion, string withgrid)
{
switch (grid)
{
case "lockscreen":
AnimateUtils.animategrid(motion, ref slide, ref GD_Lockscreen, ref GD_Login, ref sbfade, ref sbslide);
break;
case "loginscreen":
AnimateUtils.animategrid(motion, ref slide, ref GD_Login, ref GD_Background, ref sbfade, ref sbslide);
break;
}
}
}
编辑:使用将包含更改为(我最近编写了很多vb代码)
Edit2:添加了新函数。我以前错过了它。
animategrid
是静态的,但是错误消息说它不是。您是否有多个animategrid
声明?是的,但参数不同。我们的声明基本相同answer@martijn:为了更正一点,我们几乎同时发布了相同的答案,因为问题的预期解决方案是相同的!!:-)我仍然无法访问xmppCon_OnLogin()上的animategrid()方法…它显示了与前一个相同的错误..我在MainWindow中使用了TingTong.view.您在Intellisense中看到该方法了吗?我还发现,你的animategrid()方法有六个参数,但你调用它时只传递了三个参数,这是不允许的。@KathabSp:请参阅我答案中的编辑,这应该可以解决您的问题。当我按照您所说的进行更改时,它显示如下错误:“animategrid”方法的重载不包含3个参数D:\TingTong\TingTong\MainWindow.xaml.cs 402 13 TingTong
public partial class MainWindow : Window
{
static void xmppCon_OnLogin(object sender)
{
System.Windows.MessageBox.Show("Logged in to server");
animategrid("loginscreen", "away", "backgroundimg");
}
private void animategrid(string grid, string motion, string withgrid)
{
switch (grid)
{
case "lockscreen":
AnimateUtils.animategrid(motion, ref slide, ref GD_Lockscreen, ref GD_Login, ref sbfade, ref sbslide);
break;
case "loginscreen":
AnimateUtils.animategrid(motion, ref slide, ref GD_Login, ref GD_Background, ref sbfade, ref sbslide);
break;
}
}
}