使用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
答案 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();
。