MDI窗体容器:
一般来说,窗体是顶级容器,不允许放在其他任何容器内,但是如果将某个窗体的IsMdiContainer属性设置为True,那此窗体就会成为窗体容器,可以在其中放入其他窗体
在内部的窗体不管怎么调整,是无法跳出其父级窗体容器的
注:如果想让内部窗体一直最大化并且不要其显示最大化最小化按钮,可将其FormBorderStyle设置为None,Win7系统另外需要将此窗体放入一个Panel容器中

1 private void 销售ToolStripMenuItem_Click(object sender, EventArgs e) 2 { 3 Form2 f2 = new Form2(); 4 5 f2.WindowState = FormWindowState.Maximized; 6 7 f2.FormBorderStyle = FormBorderStyle.None; 8 9 f2.MdiParent = this; 10 11 f2.Parent = panel1; 12 13 f2.Show(); 14 } 15 16 MDI窗体容器
另:内部窗体打开后是不会跟随外部窗体大小变化而自适应的,此时需要另想办法,比如可以在窗体大小改变事件中让内部窗体重新恢复普通并重新最大化

1 private void Form1_SizeChanged(object sender, EventArgs e) 2 { 3 foreach (var c in panel1.Controls) 4 { 5 if (c is Form2) 6 { 7 (c as Form2).WindowState = FormWindowState.Normal; 8 (c as Form2).WindowState = FormWindowState.Maximized; 9 } 10 11 } 12 }
权限:
比如我们做一个管理系统,根据登陆者的身份,显示一部分系统的功能,可以通过在数据库中建立一个权限等级,用数字代表,在获取到登陆者的对象信息之后进行判断,对部分功能进行隐藏

1 public Form1(Users u) 2 { 3 InitializeComponent(); 4 5 if (!u.pre.Contains("1")) 6 { 7 销售ToolStripMenuItem.Visible = false; 8 } 9 10 if (!u.pre.Contains("2")) 11 { 12 仓库ToolStripMenuItem.Visible = false; 13 } 14 15 if (!u.pre.Contains("3")) 16 { 17 财务ToolStripMenuItem.Visible = false; 18 } 19 20 if (!u.pre.Contains("4")) 21 { 22 综合管理ToolStripMenuItem.Visible = false; 23 } 24 }
简单通讯:
类似QQ的即时通讯工具中,可以通过获取输入的信息、发送者对象信息、接受者对象信息,将此数据存入数据库,再从接受者一端通过Timer控件不停地获取数据库中消息,有新消息时显示从而实现
不过这种方法需要频繁的查找数据库,如果用户量过大则不宜使用

1 Users F = null; 2 Users T = null; 3 4 public Form3(Users from, Users to) 5 { 6 InitializeComponent(); 7 8 label1.Text = from.UserName; 9 label2.Text = to.UserName; 10 11 F = from; 12 T = to; 13 } 14 15 private void button1_Click(object sender, EventArgs e) 16 { 17 Context c = new Context(); 18 c.from = label1.Text; 19 c.to = label2.Text; 20 c.txt = richTextBox2.Text; 21 c.state = false; 22 23 new ContextData().Insert(c); 24 25 richTextBox1.Text += F.NickName + "对" + T.NickName + "说: "; 26 richTextBox1.Text += richTextBox2.Text + " "; 27 richTextBox2.Text = ""; 28 } 29 List<Context> cclist = new List<Context>(); 30 private void timer1_Tick(object sender, EventArgs e) 31 { 32 cclist = new ContextData().Select(T.UserName, F.UserName); 33 34 if (cclist.Count > 0) 35 { 36 foreach (var c in cclist) 37 { 38 richTextBox1.Text += c.from + "对" + c.to + "说: "; 39 richTextBox1.Text += c.txt + " "; 40 41 new ContextData().Update(c); 42 } 43 } 44 }