C# WinForms. Включить управление из другого класса - PullRequest
0 голосов
/ 30 апреля 2020

В моей программе есть две формы: public partial class Form1 : Form,

и форма входа в систему: public partial class Login : Form. Оба в одном и том же namespace

Окно входа в систему открывается при нажатии кнопки Вход в главное окно:

public partial class Form1 : Form
{
    private void LoginToolStripMenuItem_Click(object sender, EventArgs e) //Login button event
    {
        LoginWindow = new Login();
        LoginWindow.ShowDialog();
        LogOutToolStripMenuItem.Enabled = true;
    }
}

Когда пароль введен, я хочу включить дополнительные элементы управления для пользователя на главном экране.

groupBox2 по умолчанию невидим, теперь я хотел бы сделать его видимым:

public partial class Login : Form
{
    public Login()
    {
        InitializeComponent();
    }

    public void button1_Click(object sender, EventArgs e) //Confirm click event
    {
        if (textBox1.Text == Form1.password)  //Here, no trouble accessing a string from the main screen
        {
            Form1.groupBox2.Visible = true; //********** Here is my problem **********
            Form1.LoginWindow.Close();
        }
        else
        {
            textBox1.Text = "Incorrect password";
            textBox1.SelectAll();
        }
    }
}

Как мне преодолеть проблему "An object reference is required for the non-static field, method or property 'Form1.groupBox2'?

Все мои элементы управления уже установлены на publi c. Я читаю и читаю и не могу понять, это сводит меня с ума сейчас. Я не ожидаю готового решения, просто хорошее объяснение.

Ответы [ 2 ]

0 голосов
/ 30 апреля 2020

Вы можете просто вызвать событие в вашей форме входа в систему следующим образом:

public partial class Login : Form
{
  public EventHandler OnPasswordDone; // declare a event handler

  public Login()
  {
      InitializeComponent();
  }

  public void button1_Click(object sender, EventArgs e) 
  {
      if (textBox1.Text == Form1.password)  
      {
          // raise the event to notify main form
          OnPasswordDone(this, new EventArgs());
      }
      else
      {
          textBox1.Text = "Incorrect password";
          textBox1.SelectAll();
      }
  }
}

И в вашей основной форме:

public partial class Form1 : Form
{
    private void LoginToolStripMenuItem_Click(object sender, EventArgs e) //Login button event
    {
        LoginWindow = new Login();
        LoginWindow.OnPasswordDone += Login_PasswordDone; // regist your event here
        LoginWindow.ShowDialog();
        LogOutToolStripMenuItem.Enabled = true;
    }

    private void Login_PasswordDone(object sender, EventArgs e)
    {
        //Do what you need to do here like:
        groupBox2.Visible = true;
    }
}
0 голосов
/ 30 апреля 2020

Так как Form1 не является классом c, поэтому вы должны создать объект этого класса, а затем установить для свойства visible значение true, например

Form1 formobj=new Form1();
formobj.groupBox2.Visible = true;
.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...