一、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[].ToString();
q.Pwd = dr[].ToString();
q.Qx = dr[].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,那么就让销售窗体不显示
{
销售ToolStripMenuItem.Visible = false;
}
if (!qq.Qx.Contains(""))//如果权限里面不包含102,那么就让仓库窗体不显示
{
仓库ToolStripMenuItem.Visible = false;
}
if (!qq.Qx.Contains(""))//如果权限里面不包含103,那么就让财务窗体不显示
{
财务ToolStripMenuItem.Visible = false;
}
if (!qq.Qx.Contains(""))//如果权限里面不包含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;
}
} }
}

MDI窗体容器、权限设置的更多相关文章

  1. MDI窗体容器 权限设置

    MDI窗体容器:它可以让其它窗体在它的内部打开,无法超出它的范围将某个窗体的属性:IsMdiContainer设置为true - 窗口样式如何将其它窗体在它的内部打开?窗体对象名.MdiParent ...

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

    MDI窗体容器 权限  using System; using System.Collections.Generic; using System.ComponentModel; using Syste ...

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

    一.MDI窗体容器: 1.功能: 它可以让其它窗体在它的内部打开,无法超出它的范围 将某个窗体的属性:IsMdiContainer设置为true - 窗口样式 2.问题: (1)如何将其它窗体在它的内 ...

  4. MDI窗体容器和权限设置.avi

    一.MDI窗体容器 MDi窗体是装Form的容器.平常Form(窗体)就是平常展示的最高级别,但是MDI比Form还高级.它可以让其它窗体在它的内部打开,无法超出它的范围 1 创建:将某个窗体的属性: ...

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

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

  6. Winform MDI窗体容器,权限以及简单通讯

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

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

    一.打印控件 第一步先把打印对象搞出来. - printDocument    打印对象(将要打印的内容放到该对象里,从该对象里取内容打印) 设置他的PrintPage事件(对于要打印的每一页触发一次 ...

  8. MDI窗体容器--2016年12月15日

    MDI窗体容器 多文档界面(Multiple-Document Interface)简称MDI窗体.MDI窗体用于同时显示多个文档,每个文档显示在各自的窗口中.MDI窗体中通常有包含子菜单的窗口菜单, ...

  9. MDI窗体容器

    Mdi是一个窗体容器控件,直接在新建好的窗体里面,将此窗体设置为Mdi容器,开启了Mdi容器的窗体里面,如果有点击事件打开新窗体,则这些新窗体会在此窗体内部的Mdi容器中打开 操作步骤: 1.首先先新 ...

随机推荐

  1. vi编辑器的常规使用

    1.命令模式(command mode)-执行命令 在该模式中,可以输入命令来执行许多种功能.控制屏幕光标的移动,字符.字或行的删除,移动复制某区段及进入Insert mode下,或者到 last l ...

  2. 【GO】GO语言学习笔记四

    流程控制 1.条件语句 举个栗子: if x>5 { return 1; }else{ return 0; } 注意:  条件语句不需要使用括号将条件包含起来(); 无论语句体内有几条语句, ...

  3. js 判断移动设备、pc端、android、iPhone、是否为微信、微博、qq空间

    varbrowser = {   versions: function () {      var u = navigator.userAgent, app = navigator.appVersio ...

  4. JavaScript使用技巧(1)——JS常用的函数

    1.字符串对象函数和属性 函数: charAt():返回在指定位置的字符. charCodeAt():返回在指定的位置的字符的 Unicode 编码. concat():连接字符串. indexOf( ...

  5. 【前端】Web前端学习笔记【2】

    [2016.02.22至今]的学习笔记. 相关博客: Web前端学习笔记[1] 1. this在 JavaScript 中主要有以下五种使用场景 在全局函数调用中,this 绑定全局对象,浏览器环境全 ...

  6. redis3.0.6安装(linux和windows)

    官网上描述安装方法如下:$ wget http://download.redis.io/releases/redis-3.0.6.tar.gz$ tar xzf redis-3.0.6.tar.gz$ ...

  7. js遍历table中的每一个元素

    function GetInfoFromTable(tableid) { var tableInfo = ""; var tableObj = document.getElemen ...

  8. 使用Fusioncharts实现后台处理进度的前台展示

    本文要解决两个问题: 1.在ajax的数据交互中,如何获得后台的处理进度? 2.在前台界面中,如何使用图形化的方式展示后台处理进度?   关于第一个问题,不是本文的重点,简单说一下思路.因为HTTP协 ...

  9. 如何用photoshop把图片白色背景变成透明?

    1.当提示配置文件丢失时,选择“指定RGB模式”. 2.Ctrl+J是一个复合动作,复制+新建,会得到一个新图层. 3.选中新图层,点击鼠标左边工具条里面的魔棒工具,再用鼠标点击下图片的某处白色部分, ...

  10. jpg/png格式图片转eps格式的方法总结

    jpg/png格式图片转eps格式的方法总结 转自http://blog.sina.com.cn/s/blog_5410e7b50101lme2.html 用latex写论文的筒子应该遇到这样的问题: ...