• 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;
                }
            }
        
        
        
        }
    }
  • 相关阅读:
    NSURLConnection与NSURLSession的区别
    微信支付流程
    支付宝支付流程
    配置openfire问题(Oracle)
    id和instancetype
    数组和集合
    静态变量,静态常量以及全局变量
    内存的那些事
    Block循环引用解析
    线程的几个小问题
  • 原文地址:https://www.cnblogs.com/juyangchao12/p/5919945.html
Copyright © 2020-2023  润新知