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;
        }
    }
}