精华内容
下载资源
问答
  • 使用vb6.0的开发平台怎么实现窗体启动初始化加载控件控件类型的列举,列举控件后如何不依赖控件名完成对控件属性的调用操作?
  • Qt tip——初始化窗体Geometry()

    千次阅读 2016-02-25 23:42:37
    编写程序时,初始化窗体时最好不要使用setGeometry()函数,而用resize()和move()代替,因为使用setGeometry()会导致窗体show()之后再错误的位置上停留很短暂的时间,带来闪烁现象! FROM: ...

    编写程序时,初始化窗体时最好不要使用setGeometry()函数,而用resize()和move()代替,因为使用setGeometry()会导致窗体show()之后再错误的位置上停留很短暂的时间,带来闪烁现象!


    FROM: http://blog.csdn.net/mociml/article/details/5086498

    展开全文
  • 在作系统软件时,经常有某些模块或者整个软件都会有一个固定的...该方法通过传窗体对象,通过反射机制取得窗体上的每一个控件,通过循环判断控件类型,对这些不同类型的控件设置它们的属性。   /// <sum...

      在作系统软件时,经常有某些模块或者整个软件都会有一个固定的风格。这些风格就凸显了界面的样式,需要去设置一些控件的属性之类的去实现。

      面对这种有统一样式的界面时,避免每个程序员在作界面都要每一个界面去设置相同的属性,我这里整理了一个公共方法。该方法通过传窗体对象,通过反射机制取得窗体上的每一个控件,通过循环判断控件类型,对这些不同类型的控件设置它们的属性。

     

    /// <summary>
    /// 初始化控件样式
    /// </summary>
    /// <param name="frm">控件所在窗体</param>
    public void InitFormAllControlStyle(Form frm)
            {
                try
                {
                    //取得窗体属性
                    Type FormType = frm.GetType();
                    //取得控件
                    FieldInfo[] fi = FormType.GetFields(BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Public);
                    foreach (FieldInfo info in fi)
                    {
                        //设置BarManege样式
                        if (info.FieldType == typeof(DevExpress.XtraBars.BarManager))
                        {
                            DevExpress.XtraBars.BarManager barManege = (info.GetValue(frm)) as DevExpress.XtraBars.BarManager;
                            barManege.AllowCustomization = false;
                            barManege.AllowQuickCustomization = false;
                            barManege.AllowShowToolbarsPopup = false;
                        }                            
                        else if (info.FieldType == typeof(TreeList))
                        {
                            TreeList tr = (info.GetValue(frm)) as TreeList;
                            tr.OptionsView.ShowColumns = false; //是否显示选中的行
                            tr.OptionsBehavior.Editable = false; //不可编辑
                            tr.OptionsView.ShowHorzLines = false; //OptionsView提供对树状列表的显示选项,设置水平线是否显示
                            tr.OptionsView.ShowIndicator = false; //节点的指示面板是否显示
                            tr.OptionsView.ShowVertLines = false; //垂直线条是否显示
                            //设置treeList的折叠样式为 +  - 号
                            tr.LookAndFeel.UseDefaultLookAndFeel = false;
                            tr.LookAndFeel.UseWindowsXPTheme = true;
                            tr.OptionsSelection.InvertSelection = true; //聚焦的样式是否只适用于聚焦细胞或所有细胞除了聚焦对象,失去焦点后
                            foreach (TreeListColumn column in tr.Columns)
                            {
                                column.OptionsColumn.AllowSort = false;
                                column.OptionsFilter.AllowFilter = false;
                            }
                        }
                        else if (info.FieldType == typeof(GridControl))
                        {
                            GridControl grd = (info.GetValue(frm)) as GridControl;
                            var gv = (GridView)grd.MainView;
                            gv.OptionsView.ShowGroupPanel = false;
                            gv.OptionsFind.AlwaysVisible = false;
    
                            //默认设置不可编辑
                            gv.OptionsBehavior.Editable = false;
    
                            gv.OptionsView.ShowIndicator = false;
    
                            //禁用子表显示
                            gv.OptionsDetail.EnableMasterViewMode = false;
    
                            //设置标题和内容居中
                            gv.Appearance.HeaderPanel.TextOptions.HAlignment = HorzAlignment.Center;
                            gv.Appearance.ViewCaption.TextOptions.HAlignment = HorzAlignment.Center;
    
                            //禁用列头的过滤器
                            gv.OptionsCustomization.AllowFilter = false;
    
                            //排序后选择第一行数据
                            gv.EndSorting += gv_EndSorting;
    
                            //列标题,右键禁用
                            gv.OptionsMenu.EnableColumnMenu = false;
                        }
                        else if (info.FieldType == typeof(VGridControl))
                        {
                            VGridControl vgd = (info.GetValue(frm)) as VGridControl;
                            //默认设置不可编辑
                            vgd.OptionsBehavior.Editable = false;
                        }
                        else if (info.FieldType == typeof(PictureEdit))
                        {
                            PictureEdit pic = (info.GetValue(frm)) as PictureEdit;
                            var picName = pic.Name.Substring(3);
                            var picPath = ConfigHelper.ImagePath + picName + ".png";
                            if (File.Exists(picPath))
                            {
                                pic.Image = Image.FromFile(picPath);
                            }
                        }//日期控件默认最小时间为1990-1-1,最大值为2079-1-1
                        else if (info.FieldType == typeof(DateEdit))
                        {
                            DateEdit dateCol = (info.GetValue(frm)) as DateEdit;
                            dateCol.Properties.MinValue = new DateTime(1900, 1, 1);
                            dateCol.Properties.MaxValue = new DateTime(2079, 1, 1);
                        }
                        else
                        {
                            //......
                        }
                    }
                }
                catch (Exception e)
                {
                    throw e;
                }
            }

     

     

     

     

     

     

    展开全文
  • Winform 窗体控件最大自适应

    万次阅读 2018-11-08 09:00:54
    修改后最大效果如下:控件自动缩放, 步骤实现如下: 1.在窗体中放一个容器(Panel),将容器的Dock属性设置为Fill。窗体中所有控件都放入这个容器中。 2.创建一个窗体类,该窗体类继承于原始窗体类,原来的...

    运行窗体效果如下:

     默认点击最大化效果如下:

    修改后最大化效果如下:控件自动缩放,

    步骤实现如下:

    1.在窗体中放一个容器(Panel),将容器的Dock属性设置为Fill。窗体中所有控件都放入这个容器中。

    2.创建一个窗体类,该窗体类继承于原始窗体类,原来的窗体继承创建的窗体类:如下图所示

     新建一个 NForm 窗体类,继承默认窗体类 Form ,而原来的 Form1 :Form 窗体类继承的默认窗体类修改为 Form1 :NForm 自定义新建的窗体类。

    新建窗体类代码如下:

      public partial class NForm : Form
        {
            #region 控件缩放
            double formWidth;//窗体原始宽度
            double formHeight;//窗体原始高度
            double scaleX;//水平缩放比例
            double scaleY;//垂直缩放比例
            Dictionary<string, string> controlInfo = new Dictionary<string, string>();
            //控件中心Left,Top,控件Width,控件Height,控件字体Size
            /// <summary>
            /// 获取所有原始数据
            /// </summary>
            protected void GetAllInitInfo(Control CrlContainer)
            {
                if (CrlContainer.Parent == this)
                {
                    formWidth = Convert.ToDouble(CrlContainer.Width);
                    formHeight = Convert.ToDouble(CrlContainer.Height);
                }
                foreach (Control item in CrlContainer.Controls)
                {
                    if (item.Name.Trim() != "")
                        controlInfo.Add(item.Name, (item.Left + item.Width / 2) + "," + (item.Top + item.Height / 2) + "," + item.Width + "," + item.Height + "," + item.Font.Size);
                    if ((item as UserControl) == null && item.Controls.Count > 0)
                        GetAllInitInfo(item);
                }
            }
            private void ControlsChangeInit(Control CrlContainer)
            {
                scaleX = (Convert.ToDouble(CrlContainer.Width) / formWidth);
                scaleY = (Convert.ToDouble(CrlContainer.Height) / formHeight);
            }
            private void ControlsChange(Control CrlContainer)
            {
                double[] pos = new double[5];//pos数组保存当前控件中心Left,Top,控件Width,控件Height,控件字体Size
                foreach (Control item in CrlContainer.Controls)
                {
                    if (item.Name.Trim() != "")
                    {
                        if ((item as UserControl) == null && item.Controls.Count > 0)
                            ControlsChange(item);
                        string[] strs = controlInfo[item.Name].Split(',');
                        for (int j = 0; j < 5; j++)
                        {
                            pos[j] = Convert.ToDouble(strs[j]);
                        }
                        double itemWidth = pos[2] * scaleX;
                        double itemHeight = pos[3] * scaleY;
                        item.Left = Convert.ToInt32(pos[0] * scaleX - itemWidth / 2);
                        item.Top = Convert.ToInt32(pos[1] * scaleY - itemHeight / 2);
                        item.Width = Convert.ToInt32(itemWidth);
                        item.Height = Convert.ToInt32(itemHeight);
                        try{
                            item.Font = new Font(item.Font.Name, float.Parse((pos[4] * Math.Min(scaleX, scaleY)).ToString()));
                        }
                        catch{
                        }            
                    }
                }
            }
    
            #endregion
    
    
            protected override void OnSizeChanged(EventArgs e)
            {
                base.OnSizeChanged(e);
                if (controlInfo.Count > 0)
                {
                    ControlsChangeInit(this.Controls[0]);
                    ControlsChange(this.Controls[0]);
                }
            }
        }

    新建的窗体类中主要包括自定义几个方法,用以实现控件自适应

    (1)获取控件初始信息;GetAllInitInfo()              

    (2)获取窗体缩放比例;ControlsChaneInit()             

    (3)窗体改变时修改控件大小。ControlsChange()

    最后。在窗体类的构造函数中调用获取初始数据的方法:

     public Form1()
            {
                InitializeComponent();
                GetAllInitInfo(this.Controls[0]);
            }

    这样,一个自适应窗体就实现了,再也不用担心最大化和拖拽后窗体控件位置错位的尴尬了。如果对你有用,请赞一个,欢迎评论留言,更多资料信息请关注  QQ 733530469

    展开全文
  • C# WinForm 窗体及其控件的自适应 1.创建一个窗体,名称为form 2.创建设置窗体及其控件的自适应的类:AutoSizeFormClass.cs ...声明结构,只记录窗体和其控件初始位置和大小。 public struct controlRect { ...

    C# WinForm 窗体及其控件的自适应

    1.创建一个窗体,名称为form

    2.创建设置窗体及其控件的自适应的类:AutoSizeFormClass.cs

       class AutoSizeFormClass
        {
            //(1).声明结构,只记录窗体和其控件的初始位置和大小。
            public struct controlRect
            {
                public int Left;
                public int Top;
                public int Width;
                public int Height;
            }
            //(2).声明 1个对象
            //注意这里不能使用控件列表记录 List nCtrl;,因为控件的关联性,记录的始终是当前的大小。
            //      public List oldCtrl= new List();//这里将西文的大于小于号都过滤掉了,只能改为中文的,使用中要改回西文
            public List<controlRect> oldCtrl = new List<controlRect>();
            int ctrlNo = 0;//1;
            //(3). 创建两个函数
            //(3.1)记录窗体和其控件的初始位置和大小,
            public void controllInitializeSize(Control mForm)
            {
                controlRect cR;
                cR.Left = mForm.Left; cR.Top = mForm.Top; cR.Width = mForm.Width; cR.Height = mForm.Height;
                oldCtrl.Add(cR);//第一个为"窗体本身",只加入一次即可
                AddControl(mForm);//窗体内其余控件还可能嵌套控件(比如panel),要单独抽出,因为要递归调用
                                  //this.WindowState = (System.Windows.Forms.FormWindowState)(2);//记录完控件的初始位置和大小后,再最大化
                                  //0 - Normalize , 1 - Minimize,2- Maximize
            }
            private void AddControl(Control ctl)
            {
                foreach (Control c in ctl.Controls)
                {  //**放在这里,是先记录控件的子控件,后记录控件本身
                   //if (c.Controls.Count > 0)
                   //    AddControl(c);//窗体内其余控件还可能嵌套控件(比如panel),要单独抽出,因为要递归调用
                    controlRect objCtrl;
                    objCtrl.Left = c.Left; objCtrl.Top = c.Top; objCtrl.Width = c.Width; objCtrl.Height = c.Height;
                    oldCtrl.Add(objCtrl);
                    //**放在这里,是先记录控件本身,后记录控件的子控件
                    if (c.Controls.Count > 0)
                        AddControl(c);//窗体内其余控件还可能嵌套控件(比如panel),要单独抽出,因为要递归调用
                }
            }
            //(3.2)控件自适应大小,
            public void controlAutoSize(Control mForm)
            {
                if (ctrlNo == 0)
                { //*如果在窗体的Form1_Load中,记录控件原始的大小和位置,正常没有问题,但要加入皮肤就会出现问题,因为有些控件如dataGridView的的子控件还没有完成,个数少
                  //*要在窗体的Form1_SizeChanged中,第一次改变大小时,记录控件原始的大小和位置,这里所有控件的子控件都已经形成
                    controlRect cR;
                    //  cR.Left = mForm.Left; cR.Top = mForm.Top; cR.Width = mForm.Width; cR.Height = mForm.Height;
                    cR.Left = 0; cR.Top = 0; cR.Width = mForm.PreferredSize.Width; cR.Height = mForm.PreferredSize.Height;
    
                    oldCtrl.Add(cR);//第一个为"窗体本身",只加入一次即可
                    AddControl(mForm);//窗体内其余控件可能嵌套其它控件(比如panel),故单独抽出以便递归调用
                }
                float wScale = (float)mForm.Width / (float)oldCtrl[0].Width;//新旧窗体之间的比例,与最早的旧窗体
                float hScale = (float)mForm.Height / (float)oldCtrl[0].Height;//.Height;
                ctrlNo = 1;//进入=1,第0个为窗体本身,窗体内的控件,从序号1开始
                AutoScaleControl(mForm, wScale, hScale);//窗体内其余控件还可能嵌套控件(比如panel),要单独抽出,因为要递归调用
            }
            private void AutoScaleControl(Control ctl, float wScale, float hScale)
            {
                int ctrLeft0, ctrTop0, ctrWidth0, ctrHeight0;
                //int ctrlNo = 1;//第1个是窗体自身的 Left,Top,Width,Height,所以窗体控件从ctrlNo=1开始
                foreach (Control c in ctl.Controls)
                { //**放在这里,是先缩放控件的子控件,后缩放控件本身
                  //if (c.Controls.Count > 0)
                  //   AutoScaleControl(c, wScale, hScale);//窗体内其余控件还可能嵌套控件(比如panel),要单独抽出,因为要递归调用
                    ctrLeft0 = oldCtrl[ctrlNo].Left;
                    ctrTop0 = oldCtrl[ctrlNo].Top;
                    ctrWidth0 = oldCtrl[ctrlNo].Width;
                    ctrHeight0 = oldCtrl[ctrlNo].Height;
                    //c.Left = (int)((ctrLeft0 - wLeft0) * wScale) + wLeft1;//新旧控件之间的线性比例
                    //c.Top = (int)((ctrTop0 - wTop0) * h) + wTop1;
                    c.Left = (int)((ctrLeft0) * wScale);//新旧控件之间的线性比例。控件位置只相对于窗体,所以不能加 + wLeft1
                    c.Top = (int)((ctrTop0) * hScale);//
                    c.Width = (int)(ctrWidth0 * wScale);//只与最初的大小相关,所以不能与现在的宽度相乘 (int)(c.Width * w);
                    c.Height = (int)(ctrHeight0 * hScale);//
                    ctrlNo++;//累加序号
                    //**放在这里,是先缩放控件本身,后缩放控件的子控件
                    if (c.Controls.Count > 0)
                        AutoScaleControl(c, wScale, hScale);//窗体内其余控件还可能嵌套控件(比如panel),要单独抽出,因为要递归调用
    
                    if (ctl is DataGridView)
                    {
                        DataGridView dgv = ctl as DataGridView;
                        Cursor.Current = Cursors.WaitCursor;
    
                        int widths = 0;
                        for (int i = 0; i < dgv.Columns.Count; i++)
                        {
                            dgv.AutoResizeColumn(i, DataGridViewAutoSizeColumnMode.AllCells);  // 自动调整列宽  
                            widths += dgv.Columns[i].Width;   // 计算调整列后单元列的宽度和                       
                        }
                        if (widths >= ctl.Size.Width)  // 如果调整列的宽度大于设定列宽  
                            dgv.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.DisplayedCells;  // 调整列的模式 自动  
                        else
                            dgv.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill;  // 如果小于 则填充  
    
                        Cursor.Current = Cursors.Default;
                    }
                }
    
    
            }
        }
    

    3.在form.cs中调用方法

        AutoSizeFormClass asc = new AutoSizeFormClass();//实例化类
        private void form_Load(object sender, EventArgs e)
        { 
             asc.controllInitializeSize(this);            
        }
     
        private void form_SizeChanged(object sender, EventArgs e)
        {
             asc.controlAutoSize(this);
        }
    

    4.在form.designer.cs中声明方法

        this.SizeChanged += new System.EventHandler(this.form_SizeChanged);
        this.Load += new System.EventHandler(this.form_Load);
    

    参考文章:
    https://blog.csdn.net/liucheng5037/article/details/47381177

    展开全文
  • c#窗体初始化如何居中

    千次阅读 2018-07-07 23:40:00
    c#初始化窗体居中 最近在完成在完成老师发的一个小练习时,用到了c#窗体的一些知识,同时也碰到了许多问题,来说说比较基础的吧。如何让初始化的窗体居中 首先说一说创建的window窗体的基本属性,Designer.cs...
  • C# WinForm窗体及其控件自适应各种屏幕分辨率 一。说明  2012-11-30 曾经写过 《C# WinForm窗体及其控件自适应各种屏幕分辨率》 ,其中也讲解了控件自适应的原理。近期有网友说,装在panel里面的控件,没有效果...
  • 实际上,做到这点也很简单,就是首先记录窗体和它上面控件初始位置和大小,当窗体改变比例时,其控件的位置和大小也按此比例变化即可。因为窗体控件的位置和大小是相对于自己所在的窗体的,也就是所谓的窗口坐标...
  • 在C#中,直接在子线程中对窗体上的控件操作是会出现异常,这是由于子线程和运行窗体的线程是不同的空间,因此想要在子线程来操作窗体上的控件,是不可能简单的通过控件对象名来操作,但不是说不能进行操作,微软提供...
  • Skin控件 C# Winform窗体美化控件

    千次阅读 2013-01-17 12:59:54
    Skin控件 C# Winform窗体美化控件 c# 程序皮肤控件2008-09-12 16:16Visual Studio 2005工具箱上右击选择“选择项”,慢慢等...在弹出的“选择工具箱项”选项卡中,点击“浏览”,找到IrisSkin2.dll存放的位置,双击...
  • 为空白窗体添加控件

    2018-09-08 16:36:59
    //当一个程序创建窗体时,WM_CREATE消息会被触发,当希望做一些程序初始化工作时,可以把代码放到WM_CREATE消息处理逻辑中。 //简单地说,本来是创建一个空白的窗体,可我不想这样,我想创建一个有内容的窗体,那你...
  • 方法一:只能实现控件位置自动适应。 方法二:能实现控件位置与控件字体的大小自动适应。 方法一代码: 添加一个适应类: using System.Collections.Generic; using System.Windows.Forms; namespace Window...
  • WinForm窗体及其控件的自适应

    千次阅读 2014-07-03 16:32:33
    改进C# WinForm窗体及其控件自适应各种屏幕分辨率 一。说明  2012-11-30 曾经写过 《C# WinForm窗体及其控件自适应各种屏幕分辨率》 ,其中也讲解了控件自适应的原理。近期有网友说,装在panel里面的控件,没有效果...
  • 改进C# WinForm窗体及其控件自适应各种...《C# WinForm窗体及其控件自适应各种屏幕分辨率》 ,其中也讲解了控件自适应的原理。近期有网友说,装在panel里面的控件,没有效果?  这是控件嵌套的问题,加入即可实现。
  • 很多人都苦恼于如何在子窗体中操作主窗体上的控件,或者在主窗体中操作子窗体上的控件。相比较而言,后面稍微简单一些,只要在主窗体中创建子窗体的时候,保留所创建子窗体对象即可。 下面重点介绍前一种,目前...
  • C#窗体控件跟随窗体大小等比例变化

    千次阅读 2018-12-25 16:05:14
    C# 设计WinForm程序时,有时需要窗体控件跟随窗体大小等比例变化,满足显示要求,可以参考以下方法: //控件调整变量 float X; float Y; float y; //窗体加载函数 ... //窗体大小初始化 X = ...
  • 1 窗体 form 1.1创建窗体 form (默认名:userform) 和插入模块一样,插入用户窗体即可 1.2 如何运行/显示 窗体? 1.2.1 显示窗体的代码方法 据说,单写一句 userform1.show 也是可以的,因为VBE会自动先 load ...
  • 最近工作用到了C#开发Form应用程序,其中用到了主窗体和子窗体之间控件...1.主窗体中调用子窗体控件 在主窗体中调用子窗体的控件很简单,只要在主窗体中创建子窗体的时候保留所创建的子窗体对象即可。 2.子窗体中调用
  • 在用 VS.NET进行窗体设计的时候,经常会遇到这样的问题:我们需要在构造函数或者在OnLoad事件中进行自己的一些初始化操作,比如连接一个数据库、调用一个资源文件或者后期绑定一个组件。如果代码通过编译,在运行时...
  • 一个自定义控件包含多个属性...问题:如何使此控件所在窗体初始化完成之前,不触发这些繁琐的操作? 目前我已经知道 this.DesignMode 可以判断是否处于IDE设计模式,那么如何判断是否处于其所在窗体初始化过程呢?

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 36,060
精华内容 14,424
关键字:

初始化窗体的各控件