屏幕分辨率更改WinForm中的面板及其子控件显示

我正在尝试开发一个具有三个面板的Windows窗体应用程序

面板1(FileBrowsePanel): –禁止TextBox,浏览按钮

Panel 2(SearchCriteriaPanel): – Lable From Date,ToDate DateTimePicker control From Date and To Date CheckBox for each DateTimePicker control还有两个TextBoxes和ListBox两个按钮搜索和重置

Panel 3(DisplayDataPanel): – ListView显示来自浏览文件路径的数据

Panel 4(DeleteCriteriaPanel): –具有DateTimePicker控件以使用Delete Button从listview和文件中删除数据

实际问题是,当我更改屏幕的分辨率时,该面板上的所有面板和控件都超出了表格宽度和高度代码是

void LoadWindowsSetting() { this.SuspendLayout(); int i_StandardHeight = 768;//Developer Desktop Height Where the Form is Designed int i_StandardWidth = 1024; ;//Developer Desktop Width Where the Form is Designed int i_PresentHeight = Screen.PrimaryScreen.WorkingArea.Height- SystemInformation.CaptionHeight; int i_PresentWidth = Screen.PrimaryScreen.Bounds.Width; float f_HeightRatio = new float(); float f_WidthRatio = new float(); f_HeightRatio = (float)((float)i_PresentHeight / (float)i_StandardHeight); f_WidthRatio = (float)((float)i_PresentWidth / (float)i_StandardWidth); foreach (Control c in this.Controls) { if (c.GetType().ToString() == "System.Windows.Forms.Panel") { // c.SetBounds(Convert.ToInt32(c.Bounds.X * f_WidthRatio), Convert.ToInt32(c.Bounds.Y * f_WidthRatio), Convert.ToInt32(c.Bounds.Width * f_WidthRatio), Convert.ToInt32(c.Bounds.Height * f_HeightRatio)); } if (c.HasChildren) { foreach (Control cChildren in c.Controls) { cChildren.SetBounds(Convert.ToInt32(cChildren.Bounds.X * f_WidthRatio), Convert.ToInt32(cChildren.Bounds.Y * f_WidthRatio), Convert.ToInt32(cChildren.Bounds.Width * f_WidthRatio), Convert.ToInt32(cChildren.Bounds.Height * f_HeightRatio)); } c.SetBounds(Convert.ToInt32(c.Bounds.X * f_WidthRatio), Convert.ToInt32(c.Bounds.Y * f_WidthRatio), Convert.ToInt32(c.Bounds.Width * f_WidthRatio), Convert.ToInt32(c.Bounds.Height * f_HeightRatio)); } else { c.SetBounds(Convert.ToInt32(c.Bounds.X * f_WidthRatio), Convert.ToInt32(c.Bounds.Y * f_WidthRatio), Convert.ToInt32(c.Bounds.Width * f_WidthRatio), Convert.ToInt32(c.Bounds.Height * f_HeightRatio)); } } btnBrowse.Height = txtBrowseFilePath.Height + 1; btnSubmit.Height = btnBrowse.Height; btnReset.Height = btnBrowse.Height; panelSearch.Height += listBoxLogType.Height; int leftSpacePanelBrowse = (this.Width - panelBrowse.Width) / 2; int leftSpacePanelSearch = (this.Width - panelSearch.Width) / 2; int leftSpacePanelLogList = (this.Width - panelLogList.Width) / 2; int leftSpacePanelDeleteLog = (this.Width - panelDeleteLog.Width) / 2; panelBrowse.Location = new System.Drawing.Point(leftSpacePanelBrowse - 8, 25); panelSearch.Location = new System.Drawing.Point(leftSpacePanelSearch - 8, panelBrowse.Height + 40); panelLogList.Location = new System.Drawing.Point(leftSpacePanelLogList - 8, panelSearch.Height + 140); progressBarFileLoad.Location = new System.Drawing.Point((this.Width / 2) - 100, panelLogList.Bounds.Y + panelLogList.Height + 5); panelDeleteLog.Location = new System.Drawing.Point(leftSpacePanelDeleteLog - 8, panelLogList.Bounds.Y + panelLogList.Height + progressBarFileLoad.Height + 20); this.ResumeLayout(false); Invalidate(); Focus(); } 

所以我可以在屏幕分辨率发生变化时阻止控制

从表单中加载事件以这种方式调用ResizeForm()函数

 Resolution objFormResizer = new Resolution(); objFormResizer.ResizeForm(this, 768, 1024); public class Resolution { float heightRatio = new float(); float widthRatio = new float(); int standardHeight, standardWidth; public void ResizeForm(Form objForm, int DesignerHeight, int DesignerWidth) { standardHeight = DesignerHeight; standardWidth = DesignerWidth; int presentHeight = Screen.PrimaryScreen.WorkingArea.Height;//.Bounds.Height; int presentWidth = Screen.PrimaryScreen.Bounds.Width; heightRatio = (float)((float)presentHeight / (float)standardHeight); widthRatio = (float)((float)presentWidth / (float)standardWidth); objForm.AutoScaleMode = AutoScaleMode.None; objForm.Scale(new SizeF(widthRatio, heightRatio)); foreach (Control c in objForm.Controls) { if (c.HasChildren) { ResizeControlStore(c); } else { c.Font = new Font(c.Font.FontFamily, c.Font.Size * heightRatio, c.Font.Style, c.Font.Unit, ((byte)(0))); } } objForm.Font = new Font(objForm.Font.FontFamily, objForm.Font.Size * heightRatio, objForm.Font.Style, objForm.Font.Unit, ((byte)(0))); } private void ResizeControlStore(Control objCtl) { if (objCtl.HasChildren) { foreach (Control cChildren in objCtl.Controls) { if (cChildren.HasChildren) { ResizeControlStore(cChildren); } else { cChildren.Font = new Font(cChildren.Font.FontFamily, cChildren.Font.Size * heightRatio, cChildren.Font.Style, cChildren.Font.Unit, ((byte)(0))); } } objCtl.Font = new Font(objCtl.Font.FontFamily, objCtl.Font.Size * heightRatio, objCtl.Font.Style, objCtl.Font.Unit, ((byte)(0))); } else { objCtl.Font = new Font(objCtl.Font.FontFamily, objCtl.Font.Size * heightRatio, objCtl.Font.Style, objCtl.Font.Unit, ((byte)(0))); } } } 

这个课程解决了我的问题…….希望所以你也喜欢Happy Coding