zoukankan      html  css  js  c++  java
  • MDI窗体容器、权限设置

    一、MDI窗体容器:

    1、功能:

    它可以让其它窗体在它的内部打开,无法超出它的范围

    将某个窗体的属性:IsMdiContainer设置为true - 窗口样式

    2、问题:

    (1)如何将其它窗体在它的内部打开?

           窗体对象名.MdiParent = this;


    (2)窗体打开时最大化属性不好用,怎么办?

           在实例化窗体对象,show之前,用代码设置最大化属性

           注意:窗体的WindowState属性必须为默认值Normal


    (3)内部窗体最大时右上角总是显示最大最小关闭按钮,如何去掉?

           在MDI窗体里放置一个Panel,将Panel沾满全部窗体,然后让新开窗体在Panel内部打开

           窗体对象名.Parent = Panel1;


    (4)窗体最大化打开后,不会跟随MDI窗体容器的大小而改变

           使用ClinetSizeChanged事件,在事件中,将全部以打开的窗体的WindowState属性重新设置一遍


    二、权限设置:

    1、因为不同的用户能看到的程序功能不同,那么需要权限来限制用户

    2、数据库字段里面保存字符串类型的模块代码

    3、在登陆成功时进行验证,看看有没有对应模块的权限代码

    4、如果没有,那么需要把相应的功能按钮隐藏

    三、代码

    登录界面(在Program里面把登录界面设置为最先打开:Application.Run(new 登录()); )

    复制代码
    using MDI窗体容器_权限设置.App_Code;
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    
    namespace MDI窗体容器_权限设置
    {
        public partial class 登录 : Form
        {
            public 登录()
            {
                InitializeComponent();
            }
    
            private void button1_Click(object sender, EventArgs e)
            {
                QX qq = new QXData().Select(textBox1.Text, textBox2.Text);
                if(qq!=null)//两个文本框不等于空
                {
                    Form1 f=new Form1(qq);
                    f.Show();//显示主界面
                    this.Hide();
                }
            }
    
    
        }
    }
    复制代码

    数据库中权限设置表的实体类

    复制代码
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace MDI窗体容器_权限设置.App_Code
    {
        public class QX
        {
            private string _Username;
    
            public string Username
            {
                get { return _Username; }
                set { _Username = value; }
            }
            private string _Pwd;
    
            public string Pwd
            {
                get { return _Pwd; }
                set { _Pwd = value; }
            }
            private string _Qx;
    
            public string Qx
            {
                get { return _Qx; }
                set { _Qx = value; }
            }
        }
    }
    复制代码

    数据访问类

    复制代码
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Data.SqlClient;
    
    namespace MDI窗体容器_权限设置.App_Code
    {
        public class QXData
        {
            SqlConnection conn = null;
            SqlCommand cmd = null;
            public QXData()
            {
                conn = new SqlConnection("server=.;database=Data0720;user=sa;pwd=123");
                cmd = conn.CreateCommand();
            
            }
    
            public QX Select(string uname, string pwd)
            {
                QX q = null;
                cmd.CommandText = "select * from quanxian where Username=@a and Pwd=@b";
                cmd.Parameters.Clear();
                cmd.Parameters.Add("@a",uname);
                cmd.Parameters.Add("@b", pwd);
                conn.Open();
                SqlDataReader dr = cmd.ExecuteReader();
                if (dr.HasRows)
                {
                    dr.Read();
                    q = new QX();
                    q.Username = dr[0].ToString();
                    q.Pwd = dr[1].ToString();
                    q.Qx = dr[2].ToString();
                }
                conn.Close();
                return q;
            }
    
    
        }
    }
    复制代码

    主界面

    复制代码
    using MDI窗体容器_权限设置.App_Code;
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    
    namespace MDI窗体容器_权限设置
    {
        public partial class Form1 : Form
        {
            QX Q = null;
            public Form1(QX qq)
            {
                InitializeComponent();
                Q = qq;
                //设置权限
                if (!qq.Qx.Contains("101"))//如果权限里面不包含101,那么就让销售窗体不显示
                {
                    销售ToolStripMenuItem.Visible = false;
                }
                if (!qq.Qx.Contains("102"))//如果权限里面不包含102,那么就让仓库窗体不显示
                {
                    仓库ToolStripMenuItem.Visible = false;
                }
                if (!qq.Qx.Contains("103"))//如果权限里面不包含103,那么就让财务窗体不显示
                {
                    财务ToolStripMenuItem.Visible = false;
                }
                if (!qq.Qx.Contains("104"))//如果权限里面不包含104,那么就让管理窗体不显示
                {
                    管理ToolStripMenuItem.Visible = false;
                }
            }
    
            xiaoshou x = null;
            private void 销售ToolStripMenuItem_Click(object sender, EventArgs e)
            {
                x = new xiaoshou();
                //让xiaoshou  x 的MDI父级容器为this即Form1,这样销售窗体就会显示在Form1窗体内部
                x.MdiParent = this;
                //把销售窗体的父级指向Panel
                //问题:内部窗体不随着Form的拖动大小跟着变动
                //办法:代码里面去掉无边框设置,在属性里面设置
                //     然后设置Form1的ClientSizeChanged事件,让内部窗体的大小随着Form1的拖动而改变大小
                x.Parent = panel1;
                
                //在show之前让内部的窗体显示最大化
                x.WindowState = FormWindowState.Maximized;
                #region 无边框设置
                //去掉内部窗体右上角的最大化、最小化、关闭按钮,设置无边框。
                //问题:但是不好用,右上角的按钮还在,并且点击最小化之后内部窗体的大小便不会再变
                //办法:那么在Form1窗体放一个Panel,填充内部,把销售窗体的父级指向Panel(操作在上面)
                //x.FormBorderStyle = FormBorderStyle.None;
                #endregion
                x.Show();
            }
    
            cangku c = null;
            private void 仓库ToolStripMenuItem_Click(object sender, EventArgs e)
            {
                c = new cangku();           
                c.MdiParent = this;
                c.Parent = panel1;
                c.WindowState = FormWindowState.Maximized;
                c.Show();
            }
    
            caiwu w = null;
            private void 财务ToolStripMenuItem_Click(object sender, EventArgs e)
            {
                w = new caiwu();
                w.MdiParent = this;
                w.Parent = panel1;
                w.WindowState = FormWindowState.Maximized;
                w.Show();
            }
    
            guanli g = null;
            private void 管理ToolStripMenuItem_Click(object sender, EventArgs e)
            {
                g = new guanli();
                g.MdiParent = this;
                g.Parent = panel1;
                g.WindowState = FormWindowState.Maximized;
                g.Show();
            }
    
            //点错了,应该是Form1的,在下面
            private void panel1_ClientSizeChanged(object sender, EventArgs e)
            {
    
            }
    
            //设置内部窗体的大小
            private void Form1_ClientSizeChanged(object sender, EventArgs e)
            {
                if (x != null)
                {
                    x.WindowState = FormWindowState.Normal;
                    x.WindowState = FormWindowState.Maximized;
                }
                if (c != null)
                {
                    c.WindowState = FormWindowState.Normal;
                    c.WindowState = FormWindowState.Maximized;
                }
                if (w != null)
                {
                    w.WindowState = FormWindowState.Normal;
                    w.WindowState = FormWindowState.Maximized;
                }
                if (g != null)
                {
                    g.WindowState = FormWindowState.Normal;
                    g.WindowState = FormWindowState.Maximized;
                }
            }
        
        
        
        }
    }
    复制代码
  • 相关阅读:
    Codeforces 1316B String Modification
    Codeforces 1305C Kuroni and Impossible Calculation
    Codeforces 1305B Kuroni and Simple Strings
    Codeforces 1321D Navigation System
    Codeforces 1321C Remove Adjacent
    Codeforces 1321B Journey Planning
    Operating systems Chapter 6
    Operating systems Chapter 5
    Abandoned country HDU
    Computer HDU
  • 原文地址:https://www.cnblogs.com/xiaobao5161/p/5920272.html
Copyright © 2011-2022 走看看