精华内容
下载资源
问答
  • 想要达到这样的效果,首先要新建一个父窗体(MDI窗体)。 MDI窗体上又不允许放置PictureBox以外的控件,但是Picture上面就能放置控件,所有只要先在窗体上铺上一张图片,在把控件放置在图片上就可以。 运行时会发现...

    目前我理解的父窗体与子窗体的关系是:父窗体包含子窗体。
    在这里插入图片描述
    想要达到这样的效果,首先要新建一个父窗体(MDI窗体)。
    MDI窗体上又不允许放置PictureBox以外的控件,但是Picture上面就能放置控件,所有只要先在窗体上铺上一张图片,在把控件放置在图片上就可以。
    运行时会发现提示“只允许存在一个MDI窗体”,这种错误我翻阅了前辈的博客,发现是sub Main里的一句代码导致的。

    Sub Main()
        Dim flogin As New frmlogin
        flogin.Show vbModal          'flogin显示模式窗口'
        
        If Not flogin.ok Then
            End
        End If
        flogin.Hide
        '将下面这两句屏蔽即可,然后再添加一句MDIFrmmain.Show'   
        Set fmain = New MDIFrmmain
        fmain.Show                  '显示主窗体'
    End Sub
    

    运行程序后又会发现子窗体都隐藏在了图片下面,此时可以用API函数来解决这个问题:

    第一步:

    外接程序——外接程序管理器

    第二步:

    找到API函数,选择“在启动中加载”与“加载/卸载”

    第三步:

    选中系统的模块Module1——外接程序——API浏览器——加载文本文件——WIN32API.TXT——打开

    第四步:

    搜索SetParent——添加——插入

    第五步:

    可以看到Module1中出现了这句代码:Public Declare Function SetParent Lib "user32" (ByVal hWndChild As Long, ByVal hWndNewParent As Long) As Long

    这句代码要放在模块里

    第六步:

    此时在MDI窗体里在对应的子窗体中写如下代码:运行一下,就会惊喜的发现成功了!

    Private Sub Return_card_Click()
        SetParent frmReturn_card.hwnd, MDIFrmmain.hwnd
        frmReturn_card.Show
    End Sub
    
    '或者'
    
    Private Sub Check_balance_Click()
        Call SetParent(frmCheck_balance.hwnd, MDIFrmmain.hwnd)
        frmCheck_balance.Show
    End Sub
    
    展开全文
  • MDI窗体

    2018-12-10 20:25:15
    二:如何设置MDI窗体  1.设置父窗体;在MDI窗体中,起到容器作用的窗体称为“父窗体”,如果要将某个窗体设置为父窗体,只要在窗体的属性面板中将IsMdiContainer属性设置为true即可。  2.设置子窗体;mdiParent方法...

    一:MDI窗体的概念

        多文档界面(MDI)窗体用于同时显示多个文档,每个文档显示在各自的页面中

    二:如何设置MDI窗体

        1.设置父窗体;在MDI窗体中,起到容器作用的窗体称为“父窗体”,如果要将某个窗体设置为父窗体,只要在窗体的属性面板中将IsMdiContainer属性设置为true即可。

        2.设置子窗体;mdiParent方法。

    三:排列MDI子窗体

        1.水平排列

        2.垂直排列

        3.层叠排列

    例子:

    namespace MDI窗体设计

    {    

    public partial class Form1 : Form  

     {        

    public Form1()      

     {            

    InitializeComponent();      

     }        

    private void 显示子窗体ToolStripMenuItem_Click(object sender, EventArgs e)      

     {          

     Form2 frm2 = new Form2();            

    frm2.MdiParent = this;          

     frm2.Show();            

    Form3 frm3 = new Form3();            

    frm3.MdiParent = this;            

    frm3.Show();          

     Form4 frm4 = new Form4();          

     frm4.MdiParent = this;          

     frm4.Show();      

     }        

    private void 纵向排列ToolStripMenuItem_Click(object sender, EventArgs e)

           {          

     LayoutMdi(MdiLayout.TileHorizontal);    

       }      

     private void 纵向排列ToolStripMenuItem1_Click(object sender, EventArgs e)      

     {          

     LayoutMdi(MdiLayout.TileVertical);        

         }  

         private void 层叠排列ToolStripMenuItem_Click(object sender, EventArgs e)    

       {        

       LayoutMdi(MdiLayout.Cascade);    

       }

    展开全文
  • MDI窗体默认是可以重复打开i子窗体的,而我们可以通过如下方法禁止重复打开子窗窗体 打开子窗体的函数: private void OpenChildForm(Form formChild)//formChild只是是实例化的但既没有设置为父窗体的子窗体也...

    MDI父窗体默认是可以重复打开i子窗体的,而我们可以通过如下方法禁止重复打开子窗窗体        

    打开子窗体的函数:

    private void OpenChildForm(Form formChild)//formChild只是是实例化的但既没有设置为父窗体的子窗体也没有显示
            {
                bool isOpened = false;
                foreach (Form form in this.MdiChildren)
                {
               //如果要显示的子窗体已经在父窗体的子窗体数组数组中,我们就把新建的多余的formChild销毁

                    if (formChild.Name == form.Name)
                    {
                        form.Activate();//既然我们想新建但已经有了,那就把之前存在的激活并调到最前边来
                        form.WindowState = FormWindowState.Normal;//窗口大小  为窗口模式
                        formChild.Dispose();
                        isOpened = true;//表示窗口已经打开

                        break;
                    }
                }

                if (!isOpened)//如果没打开
                {
                    formChild.MdiParent = this;//设置为子窗体
                    formChild.Show();

                }
            }
     

    该函数的使用:

    ①Form2 form2=new Form2();

    ②form2.Name="Form2";或者换成  form2.Name = form.GetType().FullName;//根据对象自动得到命名空间.类名

       //一定要类名相同,因为Name是判断是否是同一窗体的标识符;注:如果不给Name赋值会是""

    ③OpenChildForm(form2);//每次想打开新窗口时都如此处理即可

     

     

    PS:为了更方便使用,可以把第②个语句中的 form2.Name = form.GetType().FullName;放在OpenChildForm();函数的第一句

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

    一、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;
                }
            }
        
        
        
        }
    }
    复制代码

    转载于:https://www.cnblogs.com/xiaobao5161/p/5920272.html

    展开全文
  • 在WinForm编程中大家可以想要在MDI窗体中插入一张背景图片,下面给出实现方法:首先定义一个MdiClient变量 privateSystem.Windows.Forms.MdiClientmdiClient; 在Mdi窗体的构造函数中添加如下代码: ////准备...
  • MDI窗体容器 权限设置

    2016-09-29 14:25:00
    MDI窗体容器:它可以让其它窗体在它的内部打开,无法超出它的范围将某个窗体的属性:IsMdiContainer设置为true - 窗口样式如何将其它窗体在它的内部打开?窗体对象名.MdiParent = this;窗体打开时最大化属性不好用,...
  • 如题,就是form1为MDI窗体,在另外项目中有form2和form3。form2由form1控制弹出,成为form1子窗体,form3由form2控制弹出,现在想form3同时成为form1的子窗体,请问如何设置
  • 很多学习VB的朋友在开发项目时会遇到使用MDI窗体,其中很多人想美化软件,给MDI加上背景,但是部分人不知如何去做,其实很简单,在此我将用代码演示MDI窗体背景的设置(按照窗体尺寸缩放背景),更换背景的方法也是如此.
  • 一、MDI窗体容器: 1、功能: 它可以让其它窗体在它的内部打开,无法超出它的范围 将某个窗体的属性:IsMdiContainer设置为true - 窗口样式 2、问题: (1)如何将其它窗体在它的内部打开? 窗体对象名....
  • WinForm MDI窗体容器

    2017-05-03 22:07:00
    (1)如何把一个窗体变成MDI窗体 选中窗体,在窗口样式属性中,有一个属性样式叫做IsMdiContainer,选中True就把该窗体变成了一个MDI窗体 (2)把窗体放进去 //设置只能打开唯一集合,用来存放记录打开的Form ...
  • MDI窗体可以避免打开窗体的时候被无数个子窗体困扰,我将为大家一一的介绍一下vb.net中MDI窗体的操作方法 一、如何vb.net教程 创建MDI窗体? 1、创建mdi主窗体 新建建立一个默认空白的Windows应用c#教程程序,在Form...
  • 将form设置mdi时,在mdi上面的一些事件就不能响应了,用如下方法就可以使用了。以mousemove举例: private void Form_Load(object sender, EventArgs e) { foreach(Control ctrl in this.Controls) { ctrl....
  • 最近在细化机房收费系统时,发现在下机窗体出现了很多消费时间为负值的情况,有时还会弹出Bug,仔细一看原来是跨日期的消费时间问题,那么如何设置跨日期的下机呢?在机房收费系统中的MDI 窗体如何运用呢?下面就这...
  • 一般情况下我们会将软件的主窗体设置MDI窗体。那么在主窗体的菜单部分调出来的其他窗体就是主窗体的子窗体了。 (1)在主窗体中如何调用一个子窗体尼?贴代码啦,这段代码当然是写在主窗体里面的按钮或者菜单事件...
  • 如何检查是否一个MDI子将一个MDI父,如果它已经加载,然后激活它,而不是创建一个新的实例并设置它作为一个MDI的孩子。 示例代码是用c#写的。本文将尤其是帮助那些VB 6.0程序员和最近转移到。net。 检查现有的Windows...
  • 如何将其它窗体在它的内部打开? 窗体对象名.MdiParent = this; 窗体打开时最大化属性不好用,怎么办? 在实例化窗体对象,show之前,用代码设置最大化属性 注意:窗体的WindowState属性必须为默认值Normal 内部...
  • 窗体容器MDI

    2017-05-06 22:14:00
    (1)如何把一个窗体变成MDI窗体 选中窗体,在窗口样式属性中,有一个属性样式叫做IsMdiContainer,选中True就把该窗体变成了一个MDI窗体 (2)把窗体放进去 //设置只能打开唯一集合,用来存放记录打开的Form .....
  •  设置文档标题为“文档0”、“文档1”... 。  (r)将CChildFrame ::PreCreateWindow() 函数改为: //注意,是CChildFrame中的PreCreateWindow()函数,不是View中的 BOOL CChildFrame::PreCreateWindow...
  • 单例模式——解决MDI窗体实例化的问题

    千次阅读 热门讨论 2014-06-01 21:33:38
    比如,如何MDI窗体如何显示在上层的问题和MDI窗体实例化的问题。  对于如何显示在上层的问题,我这次采用的还是SetParent函数,在模块里面添加: '定义一个用来设置窗体的函数 Declare Function ...
  • 第一篇:如何MDI窗体中控制父窗体的属性等等 功能:比如打开一个子窗体后,就要设置窗体中的某个菜单项或者按钮为不可见状态,诸如此类。 内容: MDI窗体MDI窗体类定义如下: MDI窗体: Class ...

空空如也

空空如也

1 2 3 4 5 ... 8
收藏数 141
精华内容 56
关键字:

如何设置mdi窗体