Как я могу вызвать метод из UserContol? - PullRequest
0 голосов
/ 05 января 2019

В моей программе много пользовательских контролей. Только один пользовательский элемент управления (по умолчанию) виден без ввода пароля.

Когда необходимо просмотреть другие элементы управления пользователя, пользователь должен ввести пароль, после чего сразу же должна появиться другая форма (кнопка, на которой пользователь нажал на вызов).

Для модели у нас есть 2 пользовательских элемента управления. Первый открывается сразу при запуске, а чтобы открыть второй, нам нужно нажать на кнопку запуска, затем появится пароль и (если пароль правильный) будет открыта необходимая форма.

В последнем коде моя проблема.

У меня есть UserLeftPanel, который всегда отображается как левая панель, и MainForm (в коде Form1). В LeftUserPanel много нажатых кнопок, Form1 высветит некоторые UserControl. Я не понимаю, как правильно получить метод из базового класса (Form1).

Специально для моей программы: И если вся пользовательская логика вызовов неверна, я буду рад увидеть правильную.

Каждый UserControl, отображаемый при нажатии, имеет эту конструкцию

 private static UserMainPanel_Saved instanse;
    public static UserMainPanel_Saved Instanse
    {
       get
        {
            if(instanse==null)
                instanse =new UserMainPanel_Saved();
            return instanse;
        }
    }

Код внутри UserLeftPanel

  public delegate void Handler(object sender,EventArgs e, int control) ;
    public event Handler  ButtonClick;
  protected void ButtonSavedMessages_Click(object sender, EventArgs e)
    {
        int formnumber = 0;          
            this?.ButtonClick(this, e,formnumber);// There are ButtonClick Event in Form1
    }

Код внутри формы1

 private void userLeftPanel1_Load(object sender, EventArgs e)
    {
        userLeftPanel1.ButtonClick += UserControl_ButtonClick;
        UserControl_ButtonClick(sender, e, 0);//to display form without password by default
    }
public  void UserControl_ButtonClick(object sender, EventArgs e,int number)
    {
        UserControl con=null ;
        if (number == 0)
             con = UserMainPanel_Saved.Instanse;
        else
        {               
                if (UserPassword.Password)
                {
                    if (number == 1)
                        con = UserMainDaybook.Instanse;
                }
                else
                {
                    con = UserPassword.Instanse;
                }
        }

        if (!MainPanel.Controls.Contains(con))
        { 
           MainPanel.Controls.Add( con);
           con.Dock = DockStyle.Fill;
           con.BringToFront();
        }          
        else
        {
           con.BringToFront();
        }
    }

Код внутри 'UserPassword'

 private void button1_Click(object sender, EventArgs e)
    {
        Password = true;// In this place will be Some Logic
   //And my idea is to Invoke there UserControl_ButtonClick( ... ) method, but I don't know how
    }

1 Ответ

0 голосов
/ 05 января 2019

Вы можете попробовать отделить событие от метода с помощью логики (обратите внимание на два разных метода: UserControl_ButtonClick и UserControlClick:

public void UserControl_ButtonClick(object sender, EventArgs e, int number)
{
    UserControlClick(number);
}

public void UserControlClick(int number)
{
    UserControl con=null ;
    if (number == 0)
         con = UserMainPanel_Saved.Instanse;
    else
    {               
            if (UserPassword.Password)
            {
                if (number == 1)
                    con = UserMainDaybook.Instanse;
            }
            else
            {
                con = UserPassword.Instanse;
            }
    }

    if (!MainPanel.Controls.Contains(con))
    { 
       MainPanel.Controls.Add( con);
       con.Dock = DockStyle.Fill;
       con.BringToFront();
    }          
    else
    {
       con.BringToFront();
    }
}```

А затем в UserPassword:

private void button1_Click(object sender, EventArgs e)
{
    Password = true;// In this place will be Some Logic
    Form1.Instance.UserControlClick(0);
    //And my idea is to Invoke there UserControl_ButtonClick( ... ) method, but I don't know how
}

Таким образом, вам не нужно отправлять object sender, EventArgs e, int number, вы можете просто отправить номер.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...