C#winform设置窗体自动缩放适应不同尺寸的电脑屏幕大小 适应不同的分辨率 |
您所在的位置:网站首页 › xmind窗口不能调整大小 › C#winform设置窗体自动缩放适应不同尺寸的电脑屏幕大小 适应不同的分辨率 |
C#winform设置窗体自动缩放适应不同尺寸的电脑屏幕大小 适应不同的分辨率 (带dataGridView控件)解决dataGridView控件不能调整行高的问题 由于用户屏幕大小不同分辨率和缩放比例不同,固定大小的窗体不能满足所有人的需求,窗体缩放就成为了一个困扰,我在网上寻找过多种方法,以下方法最好用,再次对该贴作者表示感谢。 另外由于软件需求原先的代码无法做到dataGridView,listView等表格性的控件里面 列宽,行高,字体大小 做出相应改变,所以本人进行了相应的修改,以下代码以dataGridViewInfo为例做了个示范: 其他控件具体问题具体分析,希望以下代码能帮助到你。 一、控件准备1. 首先在窗体上放上一个Panel容器,并将容器的Dock属性设为Fill,即所有的控件都放在了这个容器里。 二、代码准备#region控件缩放 double formWidth;//窗体原始宽度 double formHeight;//窗体原始高度 double scaleX;//水平缩放比例 double scaleY;//垂直缩放比例 double HeadersHeight;//dataGridView抬头高度 double RowTemplateHeight;//dataGridView行高 DictionarycontrolInfo = new Dictionary();//控件中心Left,Top,控件Width,控件Height,控件字体Size //添加了dategridview的 //dataGridViewInfo List dataGridViewInfo = newList();//dataGridView每列的宽度顺序一一对应。 /// ///获取所有原始数据 /// protected void GetAllInitInfo(ControlCrlContainer) { if (CrlContainer.Parent == this) { formWidth = Convert.ToDouble(CrlContainer.Width); formHeight =Convert.ToDouble(CrlContainer.Height); } foreach (Control item inCrlContainer.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.Name.Contains("dataGridView")) { for (int i = 0; i { dataGridViewInfo.Add(Convert.ToInt32(this.dataGridView1.Columns[i].Width)); } HeadersHeight =this.dataGridView1.ColumnHeadersHeight; RowTemplateHeight =this.dataGridView1.RowTemplate.Height; } if ((item as UserControl) ==null && item.Controls.Count > 0) GetAllInitInfo(item); } } private void ControlsChangeInit(ControlCrlContainer) { scaleX =(Convert.ToDouble(CrlContainer.Width) / formWidth); scaleY =(Convert.ToDouble(CrlContainer.Height) / formHeight); } private void ControlsChange(ControlCrlContainer) { try { double[] pos = newdouble[5];//pos数组保存当前控件中心Left,Top,控件Width,控件Height,控件字体Size foreach (Control item inCrlContainer.Controls) { if (item.Name.Trim() !="") { if ((item asUserControl) == null && item.Controls.Count > 0) ControlsChange(item); string[] strs =controlInfo[item.Name].Split(','); for (int j = 0; j 0) { ControlsChangeInit(this.Controls[0]); ControlsChange(this.Controls[0]); } } //调用函数 publicForm2() { InitializeComponent(); GetAllInitInfo(this.Controls[0]); } |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |