2013-05-18 6 views
0

Итак, вот что я пытаюсь сделать. У меня есть первичная форма в настольном приложении C#, в котором у меня есть menuStrip и splitContainer. При запуске приложения я загружаю UserControl с именем «Login» в splitContainer.Panel2, скрывая menuStrip. Управление Логин содержит поля Имя пользователя, Пароль и кнопку для входа в систему.Использование UserControl для входа в систему, а затем включение menuStrip в первичной форме

http://i.stack.imgur.com/5jcnK.png

После аутентификации (по нажатию кнопки) я хочу, чтобы включить MenuStrip и позволить другим UserControls в splitContainer.Panel2, при этом скрывая элемент управления Login.

http://i.stack.imgur.com/lwLvP.png

Как я этого добиться? Я пытался запустить событие из управления Login и каким-то образом заставить его работать в Первичной форме, но не смог реализовать. Этот подход даже стоит попробовать или мне нужно открыть несколько форм отдельно (я бы не хотел этого делать!) Любой более чистый подход к тому, как изменять вид в splitContainer.Panel2 (кроме панелей для наложения одного над другим, который был бы дизайн кошмара для меня), сохраняя при этом splitContainer.Panel1 с тем же контентом.

+0

Событие было бы идеально. Форма будет подписана на событие UserControl и затем соответствующим образом переключит элементы управления. С какими трудностями вы сталкиваетесь с подходом к мероприятию? –

+0

@Idle_Mind Спасибо за совет. IDK, события просто не работают. Возможно, я не делаю это правильно, так как я привел несколько руководств для этого. Внутри класса управления Login объявляю: public delegate void EventHandler (отправитель объекта, EventArgs e); публичное событие EventHandler Authenticated; При нажатии кнопки «Войти»: , если пользователь аутентифицирован из db i do: 1. Authenticated (это новый System.EventArgs()); ИЛИ 2. this.Authenticated (это, e); В классе первичной формы i ПОПРОБУЙТЕ: Login.EventHandler = новый EventHandler (аутентифицирован); Flummoxed, поскольку он должен работать согласно учебникам. – Abhi

ответ

0

Ваша попытка звучит так, как будто она должна была работать.

Вы добавляете элемент управления Login во время разработки или через код?

Вот пример его создания через код ... работал отлично для меня.

Form1:

public partial class Form1 : Form 
{ 
    public Form1() 
    { 
     InitializeComponent(); 
     menuStrip1.Visible = false; 
     Login login = new Login(); 
     login.Authenticated += new EventHandler(login_Authenticated); 
     splitContainer1.Panel2.Controls.Add(login); 
    } 

    void login_Authenticated(object sender, EventArgs e) 
    { 
     Login login = (Login)sender; 
     // ... possibly extract some info from "login" ... 

     menuStrip1.Visible = true; 
     login.Dispose(); 
    } 

} 

Войти UserControl:

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

    public event EventHandler Authenticated; 

    private void btnLogin_Click(object sender, EventArgs e) 
    { 
     if (true) // if they have authenticated 
     { 
      if (Authenticated != null) // only raise the event if we have subscribers 
      { 
       Authenticated(this, new EventArgs()); 
      } 
     } 
    } 
}