Winform MDI窗体容器权限简单通讯

Posted 苏迁时

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 + "说:\\r";
            richTextBox1.Text += richTextBox2.Text + "\\r\\n";
            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 + "说:\\r";
                    richTextBox1.Text += c.txt + "\\r\\n";

                    new ContextData().Update(c);
                }
            }
        }
简单通讯主要部分

 

以上是关于Winform MDI窗体容器权限简单通讯的主要内容,如果未能解决你的问题,请参考以下文章

C#-WinForm-MDI窗体容器权限设置

winform(MDI窗体容器权限设置)

winform(MDI窗体容器权限设置)

winform 之MDI容器

WPF 程序中 怎么实现像WinForm中MDI容器的效果?例如:点击A菜单,相应的窗体显示在B中!

2017-05-03winform打印控件事件对象和事件数据MDI窗体容器