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

    }

这只会引导用户使用不同的 winform

4

2 回答 2

2

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

于 2013-06-05T12:09:22.660 回答
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();
}
于 2013-06-05T11:58:52.247 回答