非静态字段,方法或属性需要对象引用

时间:2013-12-06 04:48:58

标签: c# non-static object-reference

使用Mdi和MVC处理登录方法。 Class结构非常复杂,因此需要在类之间进行常量引用。但是,当我尝试更改主菜单视图时,我得到“非静态字段,方法或属性需要对象引用”。

我仍然只是一个业余爱好者,在2个月前开始并且自学成才,所以我仍然模糊错误实际上指的是什么以及它意味着什么。

这是菜单视图类:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using DCIM_With_Test.User;

namespace DCIM_With_Test.Menu
{
     public partial class Menu_View : Form
     {
         public static int btnUser;

        public Menu_View()
        {
            InitializeComponent();  //runs the Main Menu form
             User_Controller CreateLoginView = new User_Controller(); //opens the Show_Login method in the User_Controller
            CreateLoginView.Show_Login(this); //sets the Mdi Parent container
        }

        public void SetMenuView()
        {
            switch (Db_Facade.ACCESS)
            {
                case 1:
                     plantAreaCodeToolStripMenuItem.Visible = true;
                     cableIDToolStripMenuItem.Visible = true;
                     logOutToolStripMenuItem.Visible = true;
                     createNewUserToolStripMenuItem.Visible = true;
                     editUserToolStripMenuItem.Visible = true;
                     break;
                 default:
                    plantAreaCodeToolStripMenuItem.Visible = false;
                    cableIDToolStripMenuItem.Visible = false;
                    logOutToolStripMenuItem.Visible = false;
                    createNewUserToolStripMenuItem.Visible = false;
                    editUserToolStripMenuItem.Visible = false;
                    break;
            }
        }

用户控制器:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using DCIM_With_Test.Menu;

namespace DCIM_With_Test.User
{
    class User_Controller
    {
        public void Show_Login(Menu_View Main_Menu)
        {
            User_Login_View LoginView = new User_Login_View(); // Creates an object of the User_Login_View.
            LoginView.MdiParent = Main_Menu; // Set the Parent Form of the Child window.
            LoginView.Show(); // Display the new form.
        }

        public void Show_User(Menu_View Main_Menu)
        {
            User_Edit_View EditUserView = new User_Edit_View(); // Creates an objet of the User_View.
            EditUserView.MdiParent = Main_Menu; // Set the Parent Form of the Child window.
            EditUserView.Show(); // Display the new form.
        }

        public static void Compare_Login(User_Login_View Login_View)
        {
            User_Model getACCESS = new User_Model();
            getACCESS.uName = Login_View.txtUsername.Text;
            getACCESS.uPwd = Login_View.txtPassword.Text;

            Db_Facade.ACCESS = 1;

            if (Db_Facade.ACCESS > 0)
            {
                Login_View.Close();
            }
            else
            {
                Login_View.lblError.Visible = true;
            }

            Menu_View.SetMenuView(); //here is where the error occurs
        }
    }
}

Db_Facade类目前只是变量的集合,因此为什么在User_Controller中将ACCESS设置为1

1 个答案:

答案 0 :(得分:1)

出现问题是因为您没有在函数中引用Menu_View 对象,因此它会尝试引用Menu_View ,没有分配任何静态成员。您想要做的就是致电Login_View.MdiParent.SetMenuView()

修改

您可能需要转接来电,因为您将Main_Menu保存到LoginView.MdiParent,并将其存储为基类Form。尝试:(Main_Menu)Login_View.MdiParent.SetMenuView()

如果无法构建对象,那么您可以创建一个属性来直接访问该对象。

User_Login_View中,创建一个新属性public Menu_View Menu {get;set;}。然后,在Show_Login函数中添加一行以设置Menu对象LoginView Menu = Main_Menu;。现在,您可以在不需要演员的情况下引用LoginView.Menu.SetMenuView();