Winform 窗体自适应分辨率
2013-11-19 17:10
337 查看
Winform开发时 有时会碰到窗体 碰到不同分辨率而导致 有些控件被盖住的情况 所以还是 让窗体根据电脑分辨率显示大小吧!
第一步:添加类 类中添加实现功能的代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace PowerSystemByWinForm
{
public class AutoSizeFormClass
{
public struct controlRect
{
public int Left;
public int Top;
public int Width;
public int Height;
}
private bool _Flag;
public bool Flag
{
get { return _Flag; }
set { _Flag = value; }
}
private int _Number;
public int Number
{
get { return _Number; }
set { _Number = value; }
}
private List<controlRect> oldCtrl;
public void Initialize(Control mForm)
{
oldCtrl = new List<controlRect>();
controlRect cR;
cR.Left = mForm.Left;
cR.Top = mForm.Top;
cR.Width = mForm.Width;
cR.Height = mForm.Height;
oldCtrl.Add(cR);
foreach (Control c in mForm.Controls)
{
controlRect objCtrl;
objCtrl.Left = c.Left;
objCtrl.Top = c.Top;
objCtrl.Width = c.Width;
objCtrl.Height = c.Height;
oldCtrl.Add(objCtrl);
}
Flag = true;
Number = mForm.Controls.Count;
}
public void ReSize(Control mForm)
{
if (!Flag) return;
float wScale = (float)mForm.Width / (float)oldCtrl[0].Width;
float hScale = (float)mForm.Height / (float)oldCtrl[0].Height;
int ctrLeft0, ctrTop0, ctrWidth0, ctrHeight0;
int ctrlNo = 1;
try
{
if (mForm.Controls.Count != Number) return;
foreach (Control c in mForm.Controls)
{
ctrLeft0 = oldCtrl[ctrlNo].Left;
ctrTop0 = oldCtrl[ctrlNo].Top;
ctrWidth0 = oldCtrl[ctrlNo].Width;
ctrHeight0 = oldCtrl[ctrlNo].Height;
c.Left = (int)(ctrLeft0 * wScale);
c.Top = (int)(ctrTop0 * hScale);
c.Width = (int)(ctrWidth0 * wScale);
c.Height = (int)(ctrHeight0 * hScale);
ctrlNo += 1;
}
}
catch
{
return;
}
}
}
}
第二步:调用类中的方法 实现窗体效果
private void Form1_Resize(object sender, EventArgs e)
{
autoSize.ReSize(pnlMain);
}
private void Form1_Load(object sender, EventArgs e)
{
autoSize.Initialize(pnlMain);
}
大功告成 不过这只是通过我的程序 可能太复杂的程序 会出不来效果 谨提供思路!!!
第一步:添加类 类中添加实现功能的代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace PowerSystemByWinForm
{
public class AutoSizeFormClass
{
public struct controlRect
{
public int Left;
public int Top;
public int Width;
public int Height;
}
private bool _Flag;
public bool Flag
{
get { return _Flag; }
set { _Flag = value; }
}
private int _Number;
public int Number
{
get { return _Number; }
set { _Number = value; }
}
private List<controlRect> oldCtrl;
public void Initialize(Control mForm)
{
oldCtrl = new List<controlRect>();
controlRect cR;
cR.Left = mForm.Left;
cR.Top = mForm.Top;
cR.Width = mForm.Width;
cR.Height = mForm.Height;
oldCtrl.Add(cR);
foreach (Control c in mForm.Controls)
{
controlRect objCtrl;
objCtrl.Left = c.Left;
objCtrl.Top = c.Top;
objCtrl.Width = c.Width;
objCtrl.Height = c.Height;
oldCtrl.Add(objCtrl);
}
Flag = true;
Number = mForm.Controls.Count;
}
public void ReSize(Control mForm)
{
if (!Flag) return;
float wScale = (float)mForm.Width / (float)oldCtrl[0].Width;
float hScale = (float)mForm.Height / (float)oldCtrl[0].Height;
int ctrLeft0, ctrTop0, ctrWidth0, ctrHeight0;
int ctrlNo = 1;
try
{
if (mForm.Controls.Count != Number) return;
foreach (Control c in mForm.Controls)
{
ctrLeft0 = oldCtrl[ctrlNo].Left;
ctrTop0 = oldCtrl[ctrlNo].Top;
ctrWidth0 = oldCtrl[ctrlNo].Width;
ctrHeight0 = oldCtrl[ctrlNo].Height;
c.Left = (int)(ctrLeft0 * wScale);
c.Top = (int)(ctrTop0 * hScale);
c.Width = (int)(ctrWidth0 * wScale);
c.Height = (int)(ctrHeight0 * hScale);
ctrlNo += 1;
}
}
catch
{
return;
}
}
}
}
第二步:调用类中的方法 实现窗体效果
private void Form1_Resize(object sender, EventArgs e)
{
autoSize.ReSize(pnlMain);
}
private void Form1_Load(object sender, EventArgs e)
{
autoSize.Initialize(pnlMain);
}
大功告成 不过这只是通过我的程序 可能太复杂的程序 会出不来效果 谨提供思路!!!
相关文章推荐
- WinForm窗体自适应分辨率
- WinForm窗体自适应分辨率
- WPF 中 窗体自适应分辨率
- C# WinForm窗体及其控件自适应各种屏幕分辨率
- C# Winform的自适应分辨率的类
- WinForm窗体及其控件的自适应
- C#中WinForm实现控件随窗体大小自适应改变
- 如何使窗体自适应分辨率java swing
- C# WinForm窗体及其控件自适应各种屏幕分辨率
- WinForm窗体及其控件的自适应
- 【C#】c#winform 窗体及其控件的自适应
- 程序窗体及控件自适应分辨率
- WinForm 分辨率自适应--转载自博雅居博客
- delphi 程序窗体及控件自适应分辨率
- C# WinForm 窗体 自适应
- WinForm窗体及其控件的自适应(引用集)
- 窗体自适应分辨率
- C#winForm窗体自适应改进
- WinForm窗体及其控件的自适应
- C# Winform的自适应分辨率的类