gpt4 book ai didi

c# - 当屏幕分辨率更改面板及其在 WinForm 中的子控件显示时

转载 作者:太空宇宙 更新时间:2023-11-03 11:08:14 24 4
gpt4 key购买 nike

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

Panel 1(FileBrowsePanel):- contrains TextBox , Browse Button

面板 2(SearchCriteriaPanel):- 标签从日期,到日期 DateTimePicker 控件从日期到日期 CheckBox 每个 DateTimePicker 控件还有两个文本框和列表框两个按钮搜索和重置

面板 3(DisplayDataPanel):- ListView 显示来自浏览文件路径的数据

面板 4(DeleteCriteriaPanel):- 具有 DateTimePicker 控件以使用删除按钮从 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();
}

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

最佳答案

形成表单的Load事件就是这样调用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)));
}
}
}

这门课解决了我的问题......希望你也喜欢快乐的编码

关于c# - 当屏幕分辨率更改面板及其在 WinForm 中的子控件显示时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14976612/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com