zoukankan      html  css  js  c++  java
  • Winform MDI窗体容器、权限、简单通讯

    MDI窗体容器:

    一般来说,窗体是顶级容器,不允许放在其他任何容器内,但是如果将某个窗体的IsMdiContainer属性设置为True,那此窗体就会成为窗体容器,可以在其中放入其他窗体

    在内部的窗体不管怎么调整,是无法跳出其父级窗体容器的

    注:如果想让内部窗体一直最大化并且不要其显示最大化最小化按钮,可将其FormBorderStyle设置为None,Win7系统另外需要将此窗体放入一个Panel容器中

    private void 销售ToolStripMenuItem_Click(object sender, EventArgs e)
            {
                Form2 f2 = new Form2();
    
                f2.WindowState = FormWindowState.Maximized;
    
                f2.FormBorderStyle = FormBorderStyle.None;
    
                f2.MdiParent = this;
    
                f2.Parent = panel1;
    
                f2.Show();
            }
    MDI窗体容器

    另:内部窗体打开后是不会跟随外部窗体大小变化而自适应的,此时需要另想办法,比如可以在窗体大小改变事件中让内部窗体重新恢复普通并重新最大化

     private void Form1_SizeChanged(object sender, EventArgs e)
            {
                foreach (var c in panel1.Controls)
                {
                    if (c is Form2)
                    {
                        (c as Form2).WindowState = FormWindowState.Normal;
                        (c as Form2).WindowState = FormWindowState.Maximized;
                    }
                
                }
            }
    内部窗体自适应大小

    权限:

    比如我们做一个管理系统,根据登陆者的身份,显示一部分系统的功能,可以通过在数据库中建立一个权限等级,用数字代表,在获取到登陆者的对象信息之后进行判断,对部分功能进行隐藏

    public Form1(Users u)
            {
                InitializeComponent();
    
                if (!u.pre.Contains("1"))
                {
                    销售ToolStripMenuItem.Visible = false;
                }
    
                if (!u.pre.Contains("2"))
                {
                    仓库ToolStripMenuItem.Visible = false;
                }
    
                if (!u.pre.Contains("3"))
                {
                    财务ToolStripMenuItem.Visible = false;
                }
    
                if (!u.pre.Contains("4"))
                {
                    综合管理ToolStripMenuItem.Visible = false;
                }
            }
    权限

    简单通讯:

    类似QQ的即时通讯工具中,可以通过获取输入的信息、发送者对象信息、接受者对象信息,将此数据存入数据库,再从接受者一端通过Timer控件不停地获取数据库中消息,有新消息时显示从而实现

    不过这种方法需要频繁的查找数据库,如果用户量过大则不宜使用

    Users F = null;
            Users T = null;
    
            public Form3(Users from, Users to)
            {
                InitializeComponent();
    
                label1.Text = from.UserName;
                label2.Text = to.UserName;
    
                F = from;
                T = to;
            }
    
            private void button1_Click(object sender, EventArgs e)
            {
                Context c = new Context();
                c.from = label1.Text;
                c.to = label2.Text;
                c.txt = richTextBox2.Text;
                c.state = false;
    
                new ContextData().Insert(c);
    
                richTextBox1.Text += F.NickName + "" + T.NickName + "说:
    ";
                richTextBox1.Text += richTextBox2.Text + "
    ";
                richTextBox2.Text = "";
            }
            List<Context> cclist = new List<Context>();
            private void timer1_Tick(object sender, EventArgs e)
            {
                cclist = new ContextData().Select(T.UserName, F.UserName);
    
                if (cclist.Count > 0)
                {
                    foreach (var c in cclist)
                    {
                        richTextBox1.Text += c.from + "" + c.to + "说:
    ";
                        richTextBox1.Text += c.txt + "
    ";
    
                        new ContextData().Update(c);
                    }
                }
            }
    简单通讯主要部分
  • 相关阅读:
    BDD
    linux 删除中文名称乱码的文件
    python代码调用linux命令
    linux 查看内存
    java学习day17--API-注解
    java学习day17--API-单例设计模式
    java学习day17--API-同步锁
    java学习day16--API-多线程创建两种方式
    java学习day16--API-多线程-->进程和线程
    java学习day15--API-Map-->HashMap
  • 原文地址:https://www.cnblogs.com/wt627939556/p/6184308.html
Copyright © 2011-2022 走看看