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如何使控件位置和大小自动适应窗体变化的三种不同模式

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随着变。

窗体中的控件随窗体大小变化而变化

窗体中的控件随窗体大小变化而变化
在Form的Resize事件中调用函数Resize_All就能实现控件自动调整大小,如:
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实现控件自适应父容器大小的示例代码

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窗体和控件自适应

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窗体及其控件⾃适应各种屏幕分辨率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控件及窗体属性

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用法(一)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是否自动调整大小以适应子控件。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
有时winform窗体的大小会改变,此时窗体上的控件会很混乱,如何可以使控件自适应窗体呢?以
下就是方法:
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);
}
}
}
相关文档
最新文档