, работающий над методом входа, используя Mdi и MVC. Структура класса очень сложная, поэтому необходимы постоянные ссылки между классами. Однако, когда я пытаюсь изменить вид главного меню, я получаю «ссылка на объект требуется для нестатического поля, метода или свойства».Ссылка на объект требуется для нестатического поля, метода или свойства
Я все еще только любитель, начал 2 месяца назад и самоучка, поэтому я все еще неясен в отношении того, что на самом деле имеет в виду ошибка и что это значит.
Вот меню View Класс:
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 класса в настоящее время просто набор переменных, следовательно, почему ACCESS устанавливается в 1 в User_Controller
хорошо, что отсортировал эту проблему, но теперь у меня есть еще один: «System.Windows.Forms.Form» не содержит определения для «SetMenuView» и никакого метода расширения «SetMenuView», принимающего первый аргумент типа ' System.Windows.Forms.Form '(вам не хватает директивы using или ссылки на сборку?) – Ben
На самом деле у меня возникла мысль. Могу ли я поместить вызов «SetMenuView» другим способом, который содержит ссылку на главное меню и доступ к нему таким образом? Или ссылка на Menu_View все еще мешает? – Ben
Основная проблема заключается в том, что вы храните переменную для будущего использования. Когда вы создаете переменную, вы устанавливаете тип, который, как вы ожидаете, будет храниться в нем. Например, 'MdiParent' определяется как тип' Form'. Вы можете сохранить объект в этой переменной, если он определяет эту подпись где-нибудь в дереве наследования. Когда вы его извлекаете, Тип, который он хранил, сообщает, что ** прямо ** доступно для этого объекта. Вам нужно будет передать объект для доступа к свойствам или методам дальше по цепочке. Или вы можете создать свойство, специально предназначенное для хранения объекта как типа «Main_Menu». – Claies