C#窗体wpf 自适应窗体大小分辨率问题

&&&&Delphi实现窗体自适应调整尺寸以适应不同屏幕分辩率的显示问题。
&Delphi实现窗体自适应调整尺寸以适应不同屏幕分辩率的显示问题。
实现窗体自适应调整尺寸以适应不同屏幕分辩率的显示问题
若举报审核通过,可奖励20下载分
被举报人:
举报的资源分:
请选择类型
资源无法下载
资源无法使用
标题与实际内容不符
含有危害国家安全内容
含有反动色情等内容
含广告内容
版权问题,侵犯个人或公司的版权
*详细原因:
VIP下载&&免积分60元/年(1200次)
您可能还需要
Q.为什么我点的下载下不了,但积分却被扣了
A. 由于下载人数众多,下载服务器做了并发的限制。若发现下载不了,请稍后再试,多次下载是不会重复扣分的。
Q.我的积分不多了,如何获取积分?
A. 获得积分,详细见。
完成任务获取积分。
论坛可用分兑换下载积分。
第一次绑定手机,将获得5个C币,C币可。
关注并绑定CSDNID,送10个下载分
下载资源意味着您已经同意遵守以下协议
资源的所有权益归上传用户所有
未经权益所有人同意,不得将资源中的内容挪作商业或盈利用途
CSDN下载频道仅提供交流平台,并不能对任何下载资源负责
下载资源中如有侵权或不适当内容,
本站不保证本站提供的资源的准确性,安全性和完整性,同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
开发技术下载排行
您当前C币:0&&&可兑换 0 下载积分
兑换下载分:&
消耗C币:0&
立即兑换&&
兑换成功你当前的下载分为 。前去下载资源
你下载资源过于频繁,请输入验证码
如何快速获得积分?
你已经下载过该资源,再次下载不需要扣除积分
Delphi实现窗体自适应调整尺寸以适应不同屏幕分辩率的显示问题。
所需积分:8
剩余积分:0
扫描微信二维码精彩活动、课程更新抢先知
VIP会员,免积分下载
会员到期时间:日
剩余下载次数:1000
Delphi实现窗体自适应调整尺寸以适应不同屏幕分辩率的显示问题。
剩余次数:&&&&有效期截止到:
你还不是VIP会员VIP会员享免积分 . 专属通道极速下载
VIP下载次数已满VIP会员享免积分 . 专属通道极速下载,请继续开通VIP会员
你的VIP会员已过期VIP会员享免积分 . 专属通道极速下载,请继续开通VIP会员2038人阅读
C# WinForm窗体及其控件自适应各种屏幕分辨率
  我们自己编写程序的界面,会遇到各种屏幕分辨率,只有自适应才能显的美观。实际上,做到这点也很简单,就是首先记录窗体和它上面控件的初始位置和大小,当窗体改变比例时,其控件的位置和大小也按此比例变化即可。因为窗体上控件的位置和大小是相对于自己所在的窗体的,也就是所谓的窗口坐标。
  在这里我们只考虑相对于自己窗体的窗口坐标更简单,也就是成比例变化。为了多个窗体共用,我在这里创建一个类AutoSizeFormClass ,1.使用它去记录窗体和其控件的初始位置和大小,2.根据窗体变化了的大小,成比例地实现其控件的水平和垂直方向的变化,也就是自适应。
二。使用方法
  使用方法很简单,
  1.把自适应的类整体复制到你的工程命名空间里,
  &&&然后在需要自适应的窗体中做3步即可:
  2.声明自适应类实例。
  3.为窗体添加Load事件,并在其方法Form1_Load中,调用类的初始化方法,记录窗体和其控件初始位置和大小
  4.为窗体添加SizeChanged事件,并在其方法Form1_SizeChanged中,调用类的自适应方法,完成自适应
三。完整代码如下:
(一)。自适应窗体的代码:
using System.Collections.G
using System.D
using System.D
using System.T
using System.Windows.F
namespace WindowsApplication1
public partial class Form1 : Form
//1.声明自适应类实例
AutoSizeFormClass asc = new AutoSizeFormClass();
public Form1()
InitializeComponent();
//2. 为窗体添加Load事件,并在其方法Form1_Load中,调用类的初始化方法,记录窗体和其控件的初始位置和大小
private void Form1_Load(object sender, EventArgs e)
asc.controllInitializeSize(this);
//3.为窗体添加SizeChanged事件,并在其方法Form1_SizeChanged中,调用类的自适应方法,完成自适应
private void Form1_SizeChanged(object sender, EventArgs e)
asc.controlAutoSize(this);
(二)。自适应类的代码
using System.Collections.G
using System.T
using System.Windows.F
namespace WindowsApplication1
class AutoSizeFormClass
//(1).声明结构,只记录窗体和其控件的初始位置和大小。
public struct controlRect
public int L
public int T
public int W
public int H
//(2).声明 1个对象
//注意这里不能使用控件列表记录 List&Control& nC,因为控件的关联性,记录的始终是当前的大小。
public List&controlRect& oldC
//int ctrl_first = 0;
//(3). 创建两个函数
//(3.1)记录窗体和其控件的初始位置和大小,
public void controllInitializeSize(Form mForm)
// if (ctrl_first == 0)
ctrl_first = 1;
oldCtrl = new List&controlRect&();
controlRect cR;
cR.Left = mForm.L cR.Top = mForm.T cR.Width = mForm.W cR.Height = mForm.H
oldCtrl.Add(cR);
foreach (Control c in mForm.Controls)
controlRect objC
objCtrl.Left = c.L objCtrl.Top = c.T objCtrl.Width = c.W objCtrl.Height = c.H
oldCtrl.Add(objCtrl);
// this.WindowState = (System.Windows.Forms.FormWindowState)(2);//记录完控件的初始位置和大小后,再最大化
//0 - Normalize , 1 - Minimize,2- Maximize
//(3.2)控件自适应大小,
public void controlAutoSize(Form mForm)
//int wLeft0 = oldCtrl[0].L ;//窗体最初的位置
//int wTop0 = oldCtrl[0].T
////int wLeft1 = this.L//窗体当前的位置
//int wTop1 = this.T
float wScale = (float)mForm.Width / (float)oldCtrl[0].W//新旧窗体之间的比例,与最早的旧窗体
float hScale = (float)mForm.Height / (float)oldCtrl[0].H//.H
int ctrLeft0, ctrTop0, ctrWidth0, ctrHeight0;
int ctrlNo = 1;//第1个是窗体自身的 Left,Top,Width,Height,所以窗体控件从ctrlNo=1开始
foreach (Control c in mForm.Controls)
ctrLeft0 = oldCtrl[ctrlNo].L
ctrTop0 = oldCtrl[ctrlNo].T
ctrWidth0 = oldCtrl[ctrlNo].W
ctrHeight0 = oldCtrl[ctrlNo].H
//c.Left = (int)((ctrLeft0 - wLeft0) * wScale) + wLeft1;//新旧控件之间的线性比例
//c.Top = (int)((ctrTop0 - wTop0) * h) + wTop1;
c.Left = (int)((ctrLeft0) * wScale);//新旧控件之间的线性比例。控件位置只相对于窗体,所以不能加 + wLeft1
c.Top = (int)((ctrTop0) * hScale);//
c.Width = (int)(ctrWidth0 * wScale);//只与最初的大小相关,所以不能与现在的宽度相乘 (int)(c.Width * w);
c.Height = (int)(ctrHeight0 * hScale);//
ctrlNo += 1;
  当然,窗口坐标和屏幕坐标也是可以相互转换的,  
private void Form1_MouseDown(object sender, MouseEventArgs e)
int x = e.X; //相对form窗口的坐标,客户区坐标
int y = e.Y;
int x1 = Control.MousePosition.X;//相对显示器,屏幕的坐标
int y1 = Control.MousePosition.Y;
它们之间转换如下:
this.L // 窗体所在坐标
this.PointToScreen(new Point(0, 0)); // 客户区坐标转换为屏幕坐标
this.PointToClient(new Point(0, 0)); // 屏幕坐标转换为客户区坐标
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:2288次
排名:千里之外C# winform 适应屏幕分辨率切换问题_百度知道文章结束给大家来个程序员笑话:[M]
&&&&近期做项目时,遇到开辟的winform在自己电脑上可以畸形表现,共享到其他电脑就事儿不能表现了:
&&&&1.当两个电脑分辨率相同时,无法表现完全,请检查form的autoscalemode属性是不是为none,并设为none
&&&&2.分辨率不同时,可直接在form的构造函数中调用初始化函数之后, 加上一句AutoReSizeForm.&SetFormSize(this);(对于自定义控件usercontrol也实用)
&&&&public class AutoReSizeForm
& & & & static float SH
& & & & & & get
& & & & & & {
& & & & & & & & return (float)Screen.PrimaryScreen.Bounds.Height / Properties.Settings.Default.Y;
& & & & & & }
& & & & static float SW
& & & & & & get
& & & & & & {
& & & & & & & & return (float)Screen.PrimaryScreen.Bounds.Width / Properties.Settings.Default.X;
& & & & & & }
& & & & public static void SetFormSize(Control fm)
& & & & & & fm.Location = new Point((int)(fm.Location.X * SW), (int)(fm.Location.Y * SH));
& & & & & & fm.Size = new Size((int)(fm.Size.Width * SW), (int)(fm.Size.Height * SH));
&&&&每日一道理
喜欢海,不管湛蓝或是光灿,不管平静或是波涛汹涌,那起伏荡漾的,那丝丝的波动;喜欢听海的声音,不管是浪击礁石,或是浪涛翻滚,那轻柔的,那澎湃的;喜欢看海,不管心情是舒畅的或是沉闷的,不管天气是晴朗的或是阴沉的,那舒心的,那松弛的&&
& & & & & & fm.Font = new Font(fm.Font.Name, fm.Font.Size * SH,fm.Font.Style,fm.Font.Unit,fm.Font.GdiCharSet,fm.Font.GdiVerticalFont);
& & & & & & if (fm.Controls.Count!=0)
& & & & & & {
& & & & & & & & SetControlSize(fm);
& & & & & & }
& & & & private static void SetControlSize(Control InitC)
& & & & & & foreach (Control c in InitC.Controls)
& & & & & & {
& & & & & & & & c.Location = new Point((int)(c.Location.X * SW), (int)(c.Location.Y * SH));
& & & & & & & & c.Size = new Size((int)(c.Size.Width * SW), (int)(c.Size.Height * SH));
& & & & & & & & c.Font = new Font(c.Font.Name, c.Font.Size * SH, c.Font.Style, c.Font.Unit, c.Font.GdiCharSet, c.Font.GdiVerticalFont);
& & & & & & & & if (c.Controls.Count != 0)
& & & & & & & & {
& & & & & & & & & & SetControlSize(c);
& & & & & & & & }
& & & & & & }
文章结束给大家分享下程序员的一些笑话语录:
据说有一位软件工程师,一位硬件工程师和一位项目经理同坐车参加研讨会。不幸在从盘山公路下山时坏在半路上了。于是两位工程师和一位经理就如何修车的问题展开了讨论。
硬件工程师说:&我可以用随身携带的瑞士军刀把车坏的部分拆下来,找出原因,排除故障。&
项目经理说:&根据经营管理学,应该召开会议,根据问题现状写出需求报告,制订计划,编写日程安排,逐步逼近,alpha测试,beta1测试和beta2测试解决问题。&
软件工程说:&咱们还是应该把车推回山顶再开下来,看看问题是否重复发生。&
---------------------------------
原创文章 By
分辨率和类---------------------------------
阅读(...) 评论()怎样在c#中做个窗体并能够自适应屏幕的大小_百度知道

我要回帖

更多关于 vb控件适应窗体大小 的文章

 

随机推荐