winform窗体和控件自适应
如何实现控件随对话框大小变化而自动调整大小和位置

如何实现控件随对话框大小变化而自动调整大小和位置VC++ 2009-12-28 20:27:42 阅读461 评论0字号:大中小订阅1. 处理对话框的WM_SIZE,然后用MoveWindow或者SetWindowPos来把对话框上面的控件重新调整新位置和大小。
2. 基本的做法就是响应WM_SIZE消息,并按照窗口大小比例来调整控件的位置和大小,控件的大小最好设置成窗口的百分之几,这样的话,就可以根据窗口的大小随时调整了。
3. 每次OnSize 即可获得一个CRect,然后根据这个CRect来确定这些控件的位置和大小,使用函数MoveWindow 或SetWindowpos实现。
4.1)通过下面两个函数获取的是显示屏幕的大小【屏幕的分辨率】(不包括任务栏等区域):int nFullWidth=GetSystemMetrics( SM_CXFULLSCREEN ); //屏幕宽度int nFullHeight=GetSystemMetrics( SM_CYFULLSCREEN ); //屏幕高度2)这两个函数获取的是真正屏幕的大小【屏幕的分辨率】(包括任务栏等区域):int cx = GetSystemMetrics( SM_CXSCREEN );int cy = GetSystemMetrics( SM_CYSCREEN );如:用前两个函数获取的大小可能是1024*687 ,而用下边两个获取的就是1024*768。
5. 在OnSize() 中调用:GetClientRect() 和GetWindowRect() 函数可获取窗口大小,但需注意得到的是设备坐标,如果需要画图什么的还需要转换成逻辑坐标。
6. 字体大小随窗口变化而自动变化,比如说始终使字的高度始终占窗口的1/3。
使用:1). 在Creat中将nHeight设成窗口长度或者宽度的一定比值就行了(最好在onsize函数中设置);2). 使用WM_FONTCHANGE 消息。
VB如何使控件位置和大小自动适应窗体变化的三种不同模式

VB如何使控件位置和大小自动适应窗体变化的三种不同模式本人发现VB2008前版本使控件位置和大小自动适应窗体变化的提问很多。
但回答的正确的不多。
本人用vb6.0也遇到此问题。
认真研究的一下。
给出最正确的三种模式给大家借鉴。
有更好方法可以在交流。
代码是无需更改的。
第一种。
就是最实用的,就是所有控件的width和height按比例随窗体变化,位置也是当然是按比例哦。
控件的字体不变。
如下复制到代码:'改比例,字体不该。
最实用Option ExplicitPrivate FormOldWidth As Long '保存窗体的原始宽度Private FormOldHeight As Long '保存窗体的原始高度Private Sub Form_Load()Call ResizeInit(Me) '在程序装入时必须加入End SubPrivate Sub Form_Resize()Call ResizeForm(Me) '确保窗体改变时控件随之改变End Sub'在调用ResizeForm前先调用本函数Public Sub ResizeInit(FormName As Form)Dim Obj As ControlFormOldWidth = FormName.ScaleWidthFormOldHeight = FormName.ScaleHeightOn Error Resume NextFor Each Obj In FormNameObj.Tag = Obj.Left & " " & Obj.Top & " " & Obj.Width & " " & Obj.Height & " " Next ObjOn Error GoTo 0End Sub'按比例改变表单内各元件的大小,在调用ReSizeForm前先调用ReSizeInit函数Public Sub ResizeForm(FormName As Form)Dim Pos(4) As DoubleDim i As Long, TempPos As Long, StartPos As LongDim Obj As ControlDim ScaleX As Double, ScaleY As DoubleScaleX = FormName.ScaleWidth / FormOldWidth '保存窗体宽度缩放比例ScaleY = FormName.ScaleHeight / FormOldHeight '保存窗体高度缩放比例On Error Resume NextFor Each Obj In FormNameStartPos = 1For i = 0 To 4'读取控件的原始位置与大小TempPos = InStr(StartPos, Obj.Tag, " ", vbTextCompare)If TempPos > 0 ThenPos(i) = Mid(Obj.Tag, StartPos, TempPos - StartPos)StartPos = TempPos + 1ElsePos(i) = 0End If'根据控件的原始位置及窗体改变大小的比例对控件重新定位与改变大小Obj.Move Pos(0) * ScaleX, Pos(1) * ScaleY, Pos(2) * ScaleX, Pos(3) * ScaleY Next iNext ObjOn Error GoTo 0End Sub第二种,只位置就是控件的left和top随着变。
窗体中的控件随窗体大小变化而变化

Private Sub Form_Resize()
Dim H, i As Integer
On Error Resume Next
Resize_ALL Me 'Me是窗体名,Form1,Form2等等都可以
Private MaxControl As Long
Private Const WM_NCLBUTTONDOWN = &HA1
Private Declare Function SendMessage Lib "USER32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
If FormRecord(i).Name = Then
FindForm = i
Exit Function
End If
Next i
End If
End Function
Function AddForm(pfrmIn As Form) As Long
End If
lTop = CLng((ControlRecord(i).Top * yRatio) \ 100)
lWidth = CLng((ControlRecord(i).Width * xRatio) \ 100)
lHeight = CLng((ControlRecord(i).Height * yRatio) \ 100)
C#Winform实现控件自适应父容器大小的示例代码

C#Winform实现控件⾃适应⽗容器⼤⼩的⽰例代码在⽇常开发中经常遇到控件不能随着⽗容器⼤⼩的改变⽽且⾃动改变控件的所在位置和⼤⼩。
以下是实现的代码/// <summary>/// 根据⽗容器实现控件⾃适应⼤⼩位置/// </summary>/// <param name="control">所需⾃适应⼤⼩位置的控件</param>private void ChangeLocationSizeByParent (Control control){//记录⽗容器⼤⼩,来判断改变控件⼤⼩位置是因为⽗容器的改变还是通过设置控件⼤⼩位置去改变Size parentOldSize = control.Parent.Size;PointF locationPF = new PointF();locationPF.X = (float)control.Location.X / (float)control.Parent.Width;locationPF.Y = (float)control.Location.Y / (float)control.Parent.Height;PointF sizePF = new PointF();sizePF.X = (float)control.Width / (float)control.Parent.Width;sizePF.Y = (float)control.Height / (float)control.Parent.Height;control.LocationChanged += delegate (Object o, EventArgs e) {if (control.Parent != null&&parentOldSize.Equals(control.Parent.Size)){locationPF.X = (float)control.Location.X / (float)control.Parent.Width;locationPF.Y = (float)control.Location.Y / (float)control.Parent.Height;}};control.SizeChanged += delegate (Object o, EventArgs e) {if (control.Parent != null && parentOldSize.Equals(control.Parent.Size)){sizePF.X = (float)control.Width / (float)control.Parent.Width;sizePF.Y = (float)control.Height / (float)control.Parent.Height;}};control.ParentChanged += delegate (Object o, EventArgs e) {if (control.Parent == null){return;}locationPF.X = (float)control.Location.X / (float)control.Parent.Width;locationPF.Y = (float)control.Location.Y / (float)control.Parent.Height;sizePF.X = (float)control.Width / (float)control.Parent.Width;sizePF.Y = (float)control.Height / (float)control.Parent.Height;};control.Parent.SizeChanged += delegate (Object po, EventArgs pe) {Control pControl = (Control)po;int x = (int)(pControl.Width * locationPF.X);int y = (int)(pControl.Height * locationPF.Y);control.Location = new Point(x, y);int width = (int)(pControl.Width * sizePF.X);int hetght = (int)(pControl.Height * sizePF.Y);control.Size = new Size(width, hetght);control.Refresh();parentOldSize = pControl.Size;};}到此这篇关于C# Winform 实现控件⾃适应⽗容器⼤⼩的⽰例代码的⽂章就介绍到这了,更多相关C# Winform 控件⾃适应⽗容器⼤⼩内容请搜索以前的⽂章或继续浏览下⾯的相关⽂章希望⼤家以后多多⽀持!。
winform窗体和控件自适应

setControls(newx, newy, con);
}
}
}
}
}
2、在别的窗体中调用此类中的方法可实现winform窗体自适应
例:usingSystem;
usingSystem.Collections.Generic;
ponentModel;
usingSystem.Data;
using SysБайду номын сангаасem.Linq;
using System.Text;
using System.Windows.Forms;
namespace 自己的命名空间
{
class Autosize
{
public void setTag(Control cons)
{
foreach (Control con in cons.Controls)
Y =this.Height;
autosize.setTag(this);
//this.skinEngine1.SkinFile = "EmeraldColor1.ssk";
}
privatevoidfrmMain_SizeChanged(objectsender,EventArgse)
{
floatnewx = (this.Width) / X;
{
publicpartialclassfrmMain:Form
{
Autosizeautosize =newAutosize();
privatefloatX ;//宽í度è
privatefloatY;//高?度è
publicfrmMain()
{
InitializeComponent();
C#WinForm窗体及其控件自适应各种屏幕分辨率

C#WinForm窗体及其控件⾃适应各种屏幕分辨率C# WinForm窗体及其控件⾃适应各种屏幕分辨率⼀。
说明 我们⾃⼰编写程序的界⾯,会遇到各种屏幕分辨率,只有⾃适应才能显的美观。
实际上,做到这点也很简单,就是⾸先记录窗体和它上⾯控件的初始位置和⼤⼩,当窗体改变⽐例时,其控件的位置和⼤⼩也按此⽐例变化即可。
因为窗体上控件的位置和⼤⼩是相对于⾃⼰所在的窗体的,也就是所谓的窗⼝坐标。
在这⾥我们只考虑相对于⾃⼰窗体的窗⼝坐标更简单,也就是成⽐例变化。
为了多个窗体共⽤,我在这⾥创建⼀个类AutoSizeFormClass ,1.使⽤它去记录窗体和其控件的初始位置和⼤⼩,2.根据窗体变化了的⼤⼩,成⽐例地实现其控件的⽔平和垂直⽅向的变化,也就是⾃适应。
⼆。
使⽤⽅法 使⽤⽅法很简单, 1.把⾃适应的类整体复制到你的⼯程命名空间⾥, 然后在需要⾃适应的窗体中做3步即可: 2.声明⾃适应类实例。
3.为窗体添加Load事件,并在其⽅法Form1_Load中,调⽤类的初始化⽅法,记录窗体和其控件初始位置和⼤⼩ 4.为窗体添加SizeChanged事件,并在其⽅法Form1_SizeChanged中,调⽤类的⾃适应⽅法,完成⾃适应三。
完整代码如下:(⼀)。
⾃适应窗体的代码:using System;using System.Collections.Generic;using ponentModel;using System.Data;using System.Drawing;using System.Text;using System.Windows.Forms;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;using System.Collections.Generic;using System.Text;using System.Windows.Forms;namespace WindowsApplication1{class AutoSizeFormClass{//(1).声明结构,只记录窗体和其控件的初始位置和⼤⼩。
c#winform控件及窗体属性
c#winform控件及窗体属性窗体是程序与⽤户交互的可视界⾯,窗体也是对象,窗体类定义了⽣成窗体的模版,实例化⼀个窗体类就产⽣了⼀个窗体。
.NET框架类库的System.Windows.Forms命名空间中定义的Form类是所有窗体类的基类。
1、常⽤属性属性:图标、标题、位置、背景等可在窗体属性⾯板设置,也可以代码实现。
(1)Name属性:⽤来获取或设置窗体的名称,在应⽤程序中可通过Name属性来引⽤窗体。
(2)WindowState属性:⽤来获取或设置窗体的窗⼝状态。
取值有三种:Normal(窗体正常显⽰)、Minimized(窗体以最⼩化形式显⽰)和Maximized(窗体以最⼤化形式显⽰)。
(3)StartPosition属性:⽤来获取或设置运⾏时窗体的起始位置。
(4)Text属性:该属性是⼀个字符串属性,⽤来设置或返回在窗⼝标题栏中显⽰的⽂字。
(5)AcceptButton属性:该属性⽤来获取或设置⼀个值,该值是⼀个按钮的名称,当按Enter键时就相当于单击了窗体上的该按钮。
(6)CancelButton属性:该属性⽤来获取或设置⼀个值,该值是⼀个按钮的名称,当按Esc键时就相当于单击了窗体上的该按钮。
(7)Modal属性:该属性⽤来设置窗体是否为有模式显⽰窗体。
如果有模式地显⽰该窗体,该属性值为true;否则为false。
当有模式地显⽰窗体时,只能对模式窗体上的对象进⾏输⼊。
必须隐藏或关闭模式窗体(通常是响应某个⽤户操作),然后才能对另⼀窗体进⾏输⼊。
有模式显⽰的窗体通常⽤做应⽤程序中的对话框。
(8)ActiveControl属性:⽤来获取或设置容器控件中的活动控件。
窗体也是⼀种容器控件。
(9)ActiveMdiChild属性:⽤来获取多⽂档界⾯(MDI)的当前活动⼦窗⼝。
(10)AutoScroll属性:⽤来获取或设置⼀个值,该值指⽰窗体是否实现⾃动滚动。
如果此属性值设置为true,则当任何控件位于窗体⼯作区之外时,会在该窗体上显⽰滚动条。
winform flowlayoutpanel用法(一)
winform flowlayoutpanel用法(一)Winform FlowLayoutPanel用法概述FlowLayoutPanel是Winform中的一个容器控件,用于实现流式布局。
它可以方便地动态调整子控件的位置和尺寸,适用于需要根据容器大小进行自适应布局的场景。
基本用法1.将FlowLayoutPanel控件拖拽到窗体上。
2.添加子控件:–拖拽其他控件到FlowLayoutPanel上,它们会自动成为FlowLayoutPanel的子控件。
–通过代码动态添加子控件,使用(control)方法。
3.设置自动调整大小:–默认情况下,FlowLayoutPanel的AutoSize属性为false,需要手动设置为true。
–设置AutoSize为true后,当FlowLayoutPanel的尺寸发生变化时,子控件会自动调整位置和大小。
4.设置流布局方向:–默认布局方向是从左到右,可以通过设置FlowLayoutPanel的FlowDirection属性来改变布局方向为其他值,例如从上到下、从右到左等。
子控件的排列方式FlowLayoutPanel提供了多种排列方式来调整子控件的位置和布局。
以下是一些常用的排列方式:属性•被用于设置子控件的流布局方向。
属性值可以是以下之一:–LeftToRight: 从左到右(默认)。
–TopDown: 从上到下。
–RightToLeft: 从右到左。
–BottomUp: 从下到上。
属性•用于控制子控件是否自动换行。
属性值可以是以下之一:–True: 子控件末尾自动换行。
–False: 子控件在一行内排列,超出部分不显示(默认)。
方法•用于设置指定子控件之后的子控件是否换行。
该方法接受两个参数:–控件:指定子控件。
–value:一个布尔值,表示子控件之后的子控件是否换行。
控件的尺寸和间距FlowLayoutPanel提供了多种方式来调整控件的尺寸和间距。
以下是一些常用的方式:属性•用于设置FlowLayoutPanel是否自动调整大小以适应子控件。
winform一般设定的尺寸 -回复
winform一般设定的尺寸-回复Winform一般设定的尺寸是指在开发Windows Forms桌面应用程序时,设置窗体的大小和布局的一般规范。
这些规范旨在提供用户友好的界面和良好的用户体验。
本文将逐步回答关于Winform一般设定尺寸的问题,帮助读者更好地了解如何设置和优化窗体尺寸。
第一步:了解Winform窗体的尺寸在Winform中,窗体大小以像素为单位进行测量和设置。
通常,一个标准的Winform窗体尺寸为300像素宽和200像素高。
但这只是一个起点,实际应用程序的窗体尺寸需根据内容、功能和用户需求来进行调整。
第二步:了解窗体内容在设定窗体尺寸之前,首先要考虑的是窗体的内容。
这包括需要在窗体上展示的控件、文本、图像和其他可视元素。
要确保窗体尺寸足够大,以适应所需的所有内容,同时又不会过大以至于浪费屏幕空间。
第三步:考虑屏幕分辨率和显示比例在设定窗体尺寸时,还需要考虑用户的屏幕分辨率和显示比例。
因为用户的屏幕尺寸和分辨率各不相同,所以应确保窗体在不同分辨率和显示比例下都能够正确显示,并提供良好的用户体验。
可以通过在应用程序启动时检测屏幕分辨率,并根据需要进行调整。
第四步:窗体尺寸自适应一种常见的做法是使窗体具有自适应性,根据内容和显示需求自动调整窗体尺寸。
这可以通过使用不同布局控件(如TableLayoutPanel、FlowLayoutPanel和Anchor等)来实现。
通过合理使用这些布局控件,可以确保窗体在不同屏幕大小和分辨率下都能够自动调整,并且内容可以正确地显示在窗体上。
第五步:避免过分放大或缩小虽然自适应是设置窗体尺寸的一个好方法,但是也要注意避免过分放大或缩小窗体。
如果窗体放大得过大,可能会导致一些控件过分拉伸和失真,而缩小得过小,则可能会导致一些控件内容无法完全显示。
要保持一个适中的窗体尺寸,以确保内容的可视性和可操作性。
第六步:测试和调整在完成窗体的设计和布局后,应进行测试,并根据需要进行调整。
Winform设计界面规则
Winform设计界面规则1.一致性:保持界面元素的一致性是设计规则中最重要的一点。
使用相同的颜色、字体、按钮样式和布局风格,以确保用户在不同窗体和用户控件中的使用体验一致。
2.导航:在界面中提供有效的导航和导航工具,以便用户可以轻松地找到所需的功能和信息。
使用常见的导航方式,例如菜单、工具栏和导航树等。
3.布局:选择合适的布局来组织和排列界面元素。
使用网格和对齐工具来确保元素的对齐和一致间距。
避免使用过于拥挤的布局,确保有适当的空白间隔以提高可读性和可用性。
4.颜色使用:选择适合目标用户和应用程序类型的颜色方案。
遵循品牌颜色和风格指南,以确保一致性。
避免使用过于鲜艳和刺眼的颜色,以免分散用户的注意力。
5.字体选择:选择易于阅读和识别的字体。
避免使用过小、过大或过于装饰性的字体,以免影响用户的使用体验。
6.图标和图形:使用合适的图标和图形来增强用户界面的可视效果。
确保图标具有清晰的辨认度,并与其表示的功能或信息相关联。
7.输入验证:在界面中提供必要的输入验证和错误提示。
确保用户输入的数据符合规定要求,并提供明确的错误消息,以帮助用户更正错误。
8.使用可视化反馈:在用户与界面进行交互时,提供明确的可视化反馈。
例如,在按钮点击后显示进度指示器或状态消息。
9.响应速度:确保界面在用户操作后快速响应。
优化代码和界面设计,以减少加载时间和响应延迟。
10.窗体大小和分辨率适配:确保界面在不同大小和分辨率的屏幕上都能正常显示和使用。
为各种屏幕尺寸和分辨率进行适配,并考虑使用自适应布局或流式布局。
这些规则可以帮助开发人员创建一致、易于使用和美观的Winform界面。
通过遵循这些规则,可以提高用户体验,并使应用程序更具吸引力和专业。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
下就是方法:
1、首先在自己的命名空间里先建一个Autosize.cs类
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
newy);
}
//con.Font = new Font
(, currentSize, con.Font.Style, con.Font.Unit);
con.Font = new Font
(, currentSize, con.Font.Style, con.Font.Unit);
a = Convert.ToSingle(mytag[2]) * newx;
con.Left = (int)(a);
a = Convert.ToSingle(mytag[3]) * newy; con.Top = (int)(a);
Single currentSize = Convert.ToSingle(mytag[4]) * Math.Min(newx,
using System.Windows.Forms;
namespace 自己的命名空间
{
class Autosize
{
public void setTag(Control cons)
{
foreach (Control con in cons.Controls)
{
con.Tag = con.Width + ":" + con.Height + ":" + con.Left + ":" +
if (con.Controls.Count > 0)
{
setControls(newx, newy, con);
}
}
}
}
}
2、在别的窗体中调用此类中的方法可实现winform窗体自适应
例:usingSystem;
usingSystem.Collections.Generic;
ponentModel;
namespace自己的命名空间
{
publicpartialclassfrmMain:Form
{
Autosizeautosize =newAutosize();
privatefloatX ;//宽í度è
privatefloatY;//高?度è
publicfrmMain()
{
InitializeComponent();
usingSystem.Data;
usingSystem.Drawing;
usingSystem.Linq;
usingSystem.Text;
usingSystem.Windows.Forms;
usingSemi_auto_CLIA.ProQuery;
usingSemi_auto_bTest;
X =this.Width;
Y =this.Height;
autosize.setTag(this);
//this.skinEngine1.SkinFile = "EmeraldColor1.ssk";
}
privatevoidfrmMain_SizeChanged(objectsender,EventArgse)
{
if (con.Tag != null)
{
myt(new char[] { ':' });
float a = Convert.ToSingle(mytag[0]) * newx; con.Width = (int)a;
a = Convert.ToSingle(mytag[1]) * newy; con.Height = (int)(a);
con.Top + ":" + con.Font.Size;
if (con.Controls.Count > 0) setTag(con);
}
}
string[] mytag;
public void setControls(float newx, float newy, Control cons)
{
foreach (Control con in cons.Controls)
{
floatnewx = (this.Width) / X;
floatnewy =this.Height / Y;
autosize.setControls(newx, newy,this);
}
}
}