2013-06-05 3 views
1

Я создал приложение в нескольких winforms. Первая форма - это форма входа. Когда пользователь входит в систему, он открывает ему другую форму, скажем, форму 2, а затем оттуда у меня есть полоска меню, которая позволяет пользователю далее формировать 3,4,5 и так далее.Вход/выход/ограничения

Что я хочу - это положить кнопку в верхнем правом углу и вызвать ее LOG OUT. Эта кнопка появится во всех формах (только не на первом, конечно), поэтому, когда пользователь входит в систему, делать то, что ему нужно делать, а затем иметь возможность выхода из системы, независимо от того, в какой форме он включен. Когда он выйдет, первая форма снова выскочит! Как это может быть сделано? Возможно ли закрыть форму 1 (форма журнала, родительская) и не закрыть все приложение (формы для детей) после входа в систему?

Следующее, что мне нужно - это установить ограничения ... Я имею в виду, что будут разные пользователи, обычные и администраторы, у которых будет больше доступных опций. Я сделал часть входа, проверял, есть ли имя пользователя и пароль из базы данных, которая соответствует, например. textbox1 и textbox2, но мне нужен совет, чтобы реализовать то, что я только что описал выше.

Спасибо, Бейн

private void button1_Click(object sender, EventArgs e) 
     { 
      try 
      { 
       SqlConnection con1 = getConnection(); 
       con1.Open(); 
       SqlCommand com1 = new SqlCommand(); 
       com1.Connection = con1; 
       com1.CommandType = CommandType.Text; 
       com1.CommandText = "select * from radnik WHERE username = '" + textBox2.Text + "' AND password = '" + textBox3.Text + "'"; 
       SqlDataReader reader = com1.ExecuteReader(); 

       if (reader.Read()) 
       { 
        MessageBox.Show("Uspesno ste se ulogovali!"); 
        Form2 form2 = new Form2(); 
        form2.Show(); 

       } 
       else { MessageBox.Show("Doslo je do greske!"); } 
      } 

      catch (Exception ee) 
      { 
       MessageBox.Show(ee.StackTrace); 

      } 
      Refresh(); 

     } 

это проверяет информацию для войти

private void stoloviToolStripMenuItem1_Click(object sender, EventArgs e) 
    { 
     var form3 = new Form3(); 
     form3.Show(); 

    } 

    private void stoloviToolStripMenuItem_Click(object sender, EventArgs e) 
    { 

    } 

    private void sifrarnikToolStripMenuItem_Click(object sender, EventArgs e) 
    { 
     var form4 = new Form4(); 
     form4.Show(); 
    } 

    private void rezervacijeToolStripMenuItem_Click(object sender, EventArgs e) 
    { 
     var form6 = new Form6(); 
     form6.Show(); 
    } 

    private void porudzbineToolStripMenuItem_Click(object sender, EventArgs e) 
    { 
     var form7 = new Form7(); 
     form7.Show(); 
    } 

    private void magacinToolStripMenuItem_Click(object sender, EventArgs e) 
    { 
     var form9 = new Form9(); 
     form9.Show(); 
    } 

    private void button1_Click(object sender, EventArgs e) 
    { 

     Form1 fr1 = new Form1(); 
      fr1.Show(); 

    } 

это просто привести пользователя к различным WinForms

+0

Пожалуйста, можете ли вы поделиться своим кодом до сих пор? –

+0

Я отредактировал мой вопрос – Bane

+1

Попробуйте дать свои классы и переменные значащие имена, это облегчит вашу жизнь. Также старайтесь избегать [конкатенации строк в SQL-запросах] (http://stackoverflow.com/tags/sql-injection/info). – clearpath

ответ

0

Я считаю, что вам нужно будет 3-х классов:

  1. Войти формы, в которой пользователь может проверить подлинность, вставив учетные данные и нажав loginButton
  2. в основной формы, чтобы держать полосу меню, где другие формы могли быть показана с помощью кнопок меню
  3. ребенок форма, которая будет иметь logoutButton и другие пользовательские элементы управления (так что в основном вы можете получить другие дочерние формы от него)

В Войти формы, ручка кнопки Войти нажмите так:

private void loginButton_Click(object sender, EventArgs e) 
{ 
    if (Authenticated(username.Text, password.Text)) 
    { 
     var mainForm = new MainForm(); 
     this.Visible = false; 
     mainForm.Show(this); 
    } 
} 

Основная форма, добавить обработчик события формы закрытия и некоторые обработчики для показа детей:

public MainForm() 
{ 
    InitializeComponent(); 
    FormClosing += MainForm_FormClosing; 
} 

void MainForm_FormClosing(object sender, FormClosingEventArgs e) 
{ 
    this.Owner.Visible = true; 
} 

private void form1ToolStripMenuItem_Click(object sender, EventArgs e) 
{ 
    var childForm = new ChildForm(); 
    childForm.Show(this); 
} 

В ребенке Если вы нажмете на logoutButton, получите ссылку на владельца детской формы (которая будет Основная форма), закройте принадлежащие ей формы (все это дети) и закройте форму основной:

private void logoutButton_Click(object sender, EventArgs e) 
{ 
    var owner = ((MainForm)this.Owner); 
    foreach (var childForm in owner.OwnedForms) 
    { 
     childForm.Close(); 
    } 
    owner.Close(); 
} 
+0

Привет Alex.By childForm вы имеете в виду form1, form2 в моем коде? – Bane

+0

Мне удается использовать и исправлять несколько ошибок, которые у меня были .... игнорировать комментарий выше :), но теперь у меня другая проблема. Я работаю так же, как я хочу его на дочерних формах, но в главной форме, когда я нажимаю выходить из системы кнопка показывает мне эту ошибку: «Невозможно наложить объект типа« WindowsFormsApplication1.Form1 »на тип« WindowsFormsApplication1.Form2 ».» где form1 - это логин и форма 2 основной формы ... что это проблема здесь? var owner = ((Form2) this.Owner) – Bane

+1

Это означает, что вам придется отдать его в 'var owner = ((Form1) this.Owner)', потому что владелец 'Form2' (основная форма) типа 'Form1' (форма входа). –

2

Это типичное приложение MDI. Основная форма (родительский элемент MDI Child) будет иметь кнопку в левом верхнем углу, которая активируется при входе пользователя в систему. Форма приглашения входа будет модальной. Когда пользователь нажимает кнопку выхода из системы, вы должны закрыть все дочерние формы, а затем снова представить модальную регистрационную форму.Что касается привилегий пользователя, это не сложно сделать, просто введите поле в базе данных с этой конкретной информацией. Это может быть байт целое или любое другое. Скажем, 1 = Обычный пользователь, 2 = пользователь Admin и т. Д.

+0

Я сделал это с таблицей с именем worker, у нее есть рабочий, имя пользователя, пароль и статус (1 для администратора и 2, если это обычный пользователь). Мне нужна аутентификация для имени пользователя и пароля, или я могу пойти с кодом, который я сделал до сих пор (мой вопрос). – Bane

+0

Думаю, я не понимаю вопроса. что вы подразумеваете под аутентификацией? у вас уже есть форма, где вы просите об этом, не так ли? –