c# winform窗口自适应各种分辨率类 我上网查的方法一点反应都没有

问题描述

publicstructcontrolRect{publicintLeft;publicintTop;publicintWidth;publicintHeight;}publicList<controlRect>oldCtrl=newList<controlRect>();intctrlNo=0;publicvoidcontrollInitializeSize(ControlmForm){controlRectcR;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}privatevoidAddControl(Controlctl){foreach(Controlcinctl.Controls){//**放在这里,是先记录控件的子控件,后记录控件本身//if(c.Controls.Count>0)//AddControl(c);//窗体内其余控件还可能嵌套控件(比如panel),要单独抽出,因为要递归调用controlRectobjCtrl;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),要单独抽出,因为要递归调用}}publicvoidcontrolAutoSize(ControlmForm){if(ctrlNo==0){//*如果在窗体的Form1_Load中,记录控件原始的大小和位置,正常没有问题,但要加入皮肤就会出现问题,因为有些控件如dataGridView的的子控件还没有完成,个数少//*要在窗体的Form1_SizeChanged中,第一次改变大小时,记录控件原始的大小和位置,这里所有控件的子控件都已经形成controlRectcR;//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),故单独抽出以便递归调用}floatwScale=(float)mForm.Width/(float)oldCtrl[0].Width;//新旧窗体之间的比例,与最早的旧窗体floathScale=(float)mForm.Height/(float)oldCtrl[0].Height;//.Height;ctrlNo=1;//进入=1,第0个为窗体本身,窗体内的控件,从序号1开始AutoScaleControl(mForm,wScale,hScale);//窗体内其余控件还可能嵌套控件(比如panel),要单独抽出,因为要递归调用}privatevoidAutoScaleControl(Controlctl,floatwScale,floathScale){intctrLeft0,ctrTop0,ctrWidth0,ctrHeight0;//intctrlNo=1;//第1个是窗体自身的Left,Top,Width,Height,所以窗体控件从ctrlNo=1开始foreach(Controlcinctl.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);//新旧控件之间的线性比例。控件位置只相对于窗体,所以不能加+wLeft1c.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(ctlisDataGridView){DataGridViewdgv=ctlasDataGridView;Cursor.Current=Cursors.WaitCursor;intwidths=0;for(inti=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;//调整列的模式自动elsedgv.AutoSizeColumnsMode=DataGridViewAutoSizeColumnsMode.Fill;//如果小于则填充Cursor.Current=Cursors.Default;}}

解决方案

解决方案二:
还需要设置什么吗
解决方案三:
窗体属性不就是可以设置么,好好看看
解决方案四:
一般设置控件上下左右的锚点就行了
解决方案五:
对啊,我记得设锚点啊
解决方案六:
设置成功以后屏幕一直闪怎么办

时间: 2024-08-01 15:57:03

c# winform窗口自适应各种分辨率类 我上网查的方法一点反应都没有的相关文章

利用WPF建立自适应窗口大小布局的WinForm窗口

编写WinForm程序时,都会碰到一个问题.就是WinForm窗口在不同分辨率下的大小问题.举例说明,你编写的WinForm窗口在1024×768下是合适.匀称的.不过,如果用户的计算机的分辨率为1400×900时,你的WinForm窗口就显得偏小,其中的字体和控件都显得偏小.如果用户的分辨率为640×480,那你的窗口就远远超过它的屏幕的大小. 如何解决这个问题?一般的WinForm程序都会这样操作:程序启动-->获取屏幕分辨率-->调整窗体的大小-->调整各个控件大小及位置-->

一起谈.NET技术,利用WPF建立自适应窗口大小布局的WinForm窗口

编写WinForm程序时,都会碰到一个问题.就是WinForm窗口在不同分辨率下的大小问题.举例说明,你编写的WinForm窗口在1024×768下是合适.匀称的.不过,如果用户的计算机的分辨率为1400×900时,你的WinForm窗口就显得偏小,其中的字体和控件都显得偏小.如果用户的分辨率为640×480,那你的窗口就远远超过它的屏幕的大小. 如何解决这个问题?一般的WinForm程序都会这样操作:程序启动-->获取屏幕分辨率-->调整窗体的大小-->调整各个控件大小及位置-->

winform窗口的控件有Validated事件我还能理解,为什么winform本身也有这个事件?

问题描述 一个winform窗口上我创建一个textBox和一个button,我能添加textBox的Validating/Validated事件响应来控制用户的输入,这个我能理解没有问题.但是,winform大窗口本身看起来也能添加Validating/Validated事件响应,这个我感觉不到有什么作用啊,winform上如果有多个控件的话,那到底Validate谁呢?换句话说,validate是一个动词,那么在winform上,这个动词的确切宾语到底是哪个? 解决方案 解决方案二:肯定有参

winform如何修改系统分辨率和刷新率,不调用API??

问题描述 winform如何修改系统分辨率和刷新率,不调用API??请大侠们指点下.. 解决方案 解决方案二:该回复于2008-04-08 09:38:13被版主删除解决方案三:广告都发进来了??解决方案四:大部分windows程序最终都是深入到winapi,只不过.netFramework帮你封装掉了.api函数ChangeDisplaySettings解决方案五:.net有很多类都封装了API的许多函数...修改分辨率的函数难道没有?

VC++实现非窗口类中使用定时器的方法

定时器在Windows 的程序中的作用不可忽略,也随处可见.设定一个时间间隔每0.5秒或者1秒钟刷新一次时钟,这样就可以完成一个简单的电子钟程序.在不同的编程工具中定时器的用法也不同,Visual C++中也给我们提供了实现这种功能的方法,而且方法不只一种.在窗口类中是使用定时器比较很简单,用SetTimer()设置了定时器之后,并在Class Wizard中添加了WM_TIMER消息映射后,您就可以在映射函数OnTimer()中添加代码实现,来定时完成您的任务,而且还支持任意多个定时器,这种方

前台 zoom-网页大小如何自适应屏幕分辨率 ie zoom

问题描述 网页大小如何自适应屏幕分辨率 ie zoom 现在页面大小是固定的1024*768 ,在大屏幕下1920*1080下网页很小,页面很多,所以一个一个修改不显示,有合适的js能自动让屏幕变大吗. 目前解决方案是设置body的zoom属性,firefox以及chrome都ok, ie8 ie9也问题不大,但是ie7不起作用,那位仁兄有类似的解决方案没.

html排版问题?-PC端页面如何做到页面内容自适应不同分辨率满屏显示,而不出现滚动条和内容不被隐藏?

问题描述 PC端页面如何做到页面内容自适应不同分辨率满屏显示,而不出现滚动条和内容不被隐藏? 比如: 在1280*720分辨率下页面内容能够满屏显示 ,换个1280*800.1280*768.1440*768.1440*900等不同分辨率在又改如何做到内容满屏显示,不要有内容溢出隐藏和上下左右空白出现滚动条的问题,必须要内容占满屏显示.如何做到求大神指教? 解决方案 使用media screen正对不同分辨率写一套css控制不同分辨率下的显示 通过@media screen控制网站在移动端显示

visual studio-VS 单文档自适应屏幕分辨率大小

问题描述 VS 单文档自适应屏幕分辨率大小 请教下大家:VS 单文档视图中的控件可否有自适应屏幕分辨率大小的方法?谢谢! 解决方案 可否这样做:首先获取屏幕分辨率(cx cy)然后据此调整控件大小? 解决方案二: 在对话框初始化函数中添加如下代码" ShowWindow(SW_MAXIMIZE);CWnd *pButtom1 = NULL; pButtom1 =GetDlgItem(IDC_BTRY) ;CRect rs;//GetClientRect(rs);GetClientRect(&am

请教在WinForm窗口程序中从网页获取类似瀑布流的表格内容

问题描述 有一个网页,在浏览器上拖动到网页一个表格的位置时,它才会载入一次表格内容(30行一次),再往下拖到表格的下面,才会继续载入下一次表格内容(30行一次),如此循环像瀑布一样直到加载完表格内容为止.现在想在WinForm窗口程序一次过读取完所有表格内容,请问有什么方法?谢谢.网页中的关于表格内容载入的源代码有如下:<scripttype="text/javascript"><!--window.onload=function(){HoverLi(4);};var