Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 登录/注销/限制_C#_Winforms_Visual Studio 2010 - Fatal编程技术网

C# 登录/注销/限制

C# 登录/注销/限制,c#,winforms,visual-studio-2010,C#,Winforms,Visual Studio 2010,我已经在多个winforms中构建了应用程序。第一个表单是登录表单。当用户登录时,它会打开另一个表单,比如说表单2,然后从那里我有一个菜单条,它将用户进一步带到表单3、4、5等等 我想要的是在右上角放一个按钮,称之为“注销”。这个按钮将出现在所有表单上(当然不是第一个表单),所以当用户登录时,做他需要做的事情,然后无论他在哪个表单上都能注销。当他注销时,第一张表格将再次弹出!如何做到这一点?是否可以在登录后关闭表单1(登录表单、父表单)而不关闭整个应用程序(子表单) 下一件事我要做的是设置限制。

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

我想要的是在右上角放一个按钮,称之为“注销”。这个按钮将出现在所有表单上(当然不是第一个表单),所以当用户登录时,做他需要做的事情,然后无论他在哪个表单上都能注销。当他注销时,第一张表格将再次弹出!如何做到这一点?是否可以在登录后关闭表单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

我相信您需要3个类:

  • 一个登录表单,用户将通过插入凭据并单击
    登录按钮进行身份验证
  • 一个main窗体,用于固定菜单条,按下菜单按钮可显示其他窗体
  • 子表单将有一个
    注销按钮
    和其他自定义控件(因此基本上您可以从中派生其他子表单)
  • 在登录表单中,按如下方式处理登录按钮:

    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);
    }
    
    在子窗体中,单击
    注销按钮
    时,获取子窗体所有者的引用(将是窗体),关闭其拥有的窗体(所有子窗体)并关闭窗体本身:

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

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

    您能分享您的代码吗?尽量给类和变量取有意义的名称,这样会让您的生活更轻松。此外,请尽量避免。我设法使用并修复了我遇到的几个错误…忽略上面的注释:)但现在我遇到了不同的问题。它的工作原理与我希望它在子窗体上的工作原理相同,但在主窗体上,当我按“注销”按钮时,它会显示此错误:“无法将类型为“WindowsFormsApplication1.Form1”的对象强制转换为类型为“WindowsFormsApplication1.Form2”。“其中Form1是从中登录的,Form2是主窗体…这里有什么问题?var owner=((Form2)this.owner)这意味着您必须将其强制转换为
    var owner=((Form1)this.owner)
    ,因为
    Form2
    (主窗体)的所有者)类型为
    Form1
    (登录表单)。我这样做了,表名为worker,表中有workerid、用户名、密码和状态(1表示管理员,2表示普通用户)。我需要用户名和密码的身份验证吗?或者我可以使用到目前为止完成的代码(我的问题).我想我不明白这个问题。你说的认证是什么意思?你已经有了一张你要求的表格,不是吗?