登录/注销/限制

时间:2013-06-05 11:41:56

标签: c# winforms visual-studio-2010

我已经在多个winforms中构建了应用程序。第一个表单是登录表单。当用户登录时,它会打开另一个表单,比如表单2,然后从那里我有菜单条,它将用户进一步形成3,4,5等等。

我想要的是在右上角放一个按钮并将其命名为LOG OUT。此按钮将出现在所有表格上(当然不会出现在第一个表格上),所以当用户登录时,做他需要的东西做,然后有能力退出,无论他在哪种形式。当他退出时,第一个表格会再次弹出!如何才能做到这一点?是否可以在登录后关闭表单1(登录表单,父级)并且不关闭整个应用程序(子表单)?

接下来我需要的是设置限制......我的意思是会有不同类型的用户,常规用户和管理员,这些用户可以选择更多选项。我已经完成了登录部分,检查了数据库中是否存在与例如匹配的用户名和密码。 textbox1和textbox2,但我需要一些建议来实现我刚才描述的内容。

谢谢,Bane

 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

2 个答案:

答案 0 :(得分:2)

这是典型的MDI应用程序。 Main-Form(MDI Child的父级)将在左上角有一个按钮,当用户登录时会激活该按钮。登录提示的表单将是一个模态形式。当用户单击注销按钮时,您应该关闭所有子窗体,然后再次显示模式登录窗体。关于用户的权限并不难,只需在数据库中有一个具有该特定信息的字段。它可以是一个整数或任何你喜欢的字节。假设1 =普通用户,2 =管理员用户等

答案 1 :(得分:0)

我相信你需要3个课程:

  1. 登录表单,用户将通过插入凭据并点击loginButton
  2. 进行身份验证
  3. 一个表单,用于按住菜单条,其中可以通过按菜单按钮显示其他表单
  4. 表单,其中包含logoutButton和其他自定义控件(因此基本上您可以从中派生其他子表单)
  5. 登录表单中,按以下方式处理登录按钮:

    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();
    }