winform窗体和控件自适应
如何实现控件随对话框大小变化而自动调整大小和位置
![如何实现控件随对话框大小变化而自动调整大小和位置](https://img.taocdn.com/s3/m/05f1dc0d844769eae009ed21.png)
如何实现控件随对话框大小变化而自动调整大小和位置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如何使控件位置和大小自动适应窗体变化的三种不同模式](https://img.taocdn.com/s3/m/062177f79e31433239689357.png)
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随着变。
窗体中的控件随窗体大小变化而变化
![窗体中的控件随窗体大小变化而变化](https://img.taocdn.com/s3/m/94e98df904a1b0717fd5dd08.png)
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实现控件自适应父容器大小的示例代码](https://img.taocdn.com/s3/m/49e509d6ba4cf7ec4afe04a1b0717fd5360cb2b8.png)
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窗体和控件自适应](https://img.taocdn.com/s3/m/8a94ef06f18583d0496459bf.png)
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窗体及其控件自适应各种屏幕分辨率](https://img.taocdn.com/s3/m/e5c450ed710abb68a98271fe910ef12d2af9a989.png)
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控件及窗体属性](https://img.taocdn.com/s3/m/5e3279070a4e767f5acfa1c7aa00b52acfc79cc0.png)
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用法(一)](https://img.taocdn.com/s3/m/7ccd7618ae45b307e87101f69e3143323968f58f.png)
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一般设定的尺寸 -回复](https://img.taocdn.com/s3/m/81e633576d175f0e7cd184254b35eefdc8d315e0.png)
winform一般设定的尺寸-回复Winform一般设定的尺寸是指在开发Windows Forms桌面应用程序时,设置窗体的大小和布局的一般规范。
这些规范旨在提供用户友好的界面和良好的用户体验。
本文将逐步回答关于Winform一般设定尺寸的问题,帮助读者更好地了解如何设置和优化窗体尺寸。
第一步:了解Winform窗体的尺寸在Winform中,窗体大小以像素为单位进行测量和设置。
通常,一个标准的Winform窗体尺寸为300像素宽和200像素高。
但这只是一个起点,实际应用程序的窗体尺寸需根据内容、功能和用户需求来进行调整。
第二步:了解窗体内容在设定窗体尺寸之前,首先要考虑的是窗体的内容。
这包括需要在窗体上展示的控件、文本、图像和其他可视元素。
要确保窗体尺寸足够大,以适应所需的所有内容,同时又不会过大以至于浪费屏幕空间。
第三步:考虑屏幕分辨率和显示比例在设定窗体尺寸时,还需要考虑用户的屏幕分辨率和显示比例。
因为用户的屏幕尺寸和分辨率各不相同,所以应确保窗体在不同分辨率和显示比例下都能够正确显示,并提供良好的用户体验。
可以通过在应用程序启动时检测屏幕分辨率,并根据需要进行调整。
第四步:窗体尺寸自适应一种常见的做法是使窗体具有自适应性,根据内容和显示需求自动调整窗体尺寸。
这可以通过使用不同布局控件(如TableLayoutPanel、FlowLayoutPanel和Anchor等)来实现。
通过合理使用这些布局控件,可以确保窗体在不同屏幕大小和分辨率下都能够自动调整,并且内容可以正确地显示在窗体上。
第五步:避免过分放大或缩小虽然自适应是设置窗体尺寸的一个好方法,但是也要注意避免过分放大或缩小窗体。
如果窗体放大得过大,可能会导致一些控件过分拉伸和失真,而缩小得过小,则可能会导致一些控件内容无法完全显示。
要保持一个适中的窗体尺寸,以确保内容的可视性和可操作性。
第六步:测试和调整在完成窗体的设计和布局后,应进行测试,并根据需要进行调整。
Winform设计界面规则
![Winform设计界面规则](https://img.taocdn.com/s3/m/ebfce469657d27284b73f242336c1eb91a3733e7.png)
Winform设计界面规则1.一致性:保持界面元素的一致性是设计规则中最重要的一点。
使用相同的颜色、字体、按钮样式和布局风格,以确保用户在不同窗体和用户控件中的使用体验一致。
2.导航:在界面中提供有效的导航和导航工具,以便用户可以轻松地找到所需的功能和信息。
使用常见的导航方式,例如菜单、工具栏和导航树等。
3.布局:选择合适的布局来组织和排列界面元素。
使用网格和对齐工具来确保元素的对齐和一致间距。
避免使用过于拥挤的布局,确保有适当的空白间隔以提高可读性和可用性。
4.颜色使用:选择适合目标用户和应用程序类型的颜色方案。
遵循品牌颜色和风格指南,以确保一致性。
避免使用过于鲜艳和刺眼的颜色,以免分散用户的注意力。
5.字体选择:选择易于阅读和识别的字体。
避免使用过小、过大或过于装饰性的字体,以免影响用户的使用体验。
6.图标和图形:使用合适的图标和图形来增强用户界面的可视效果。
确保图标具有清晰的辨认度,并与其表示的功能或信息相关联。
7.输入验证:在界面中提供必要的输入验证和错误提示。
确保用户输入的数据符合规定要求,并提供明确的错误消息,以帮助用户更正错误。
8.使用可视化反馈:在用户与界面进行交互时,提供明确的可视化反馈。
例如,在按钮点击后显示进度指示器或状态消息。
9.响应速度:确保界面在用户操作后快速响应。
优化代码和界面设计,以减少加载时间和响应延迟。
10.窗体大小和分辨率适配:确保界面在不同大小和分辨率的屏幕上都能正常显示和使用。
为各种屏幕尺寸和分辨率进行适配,并考虑使用自适应布局或流式布局。
这些规则可以帮助开发人员创建一致、易于使用和美观的Winform界面。
通过遵循这些规则,可以提高用户体验,并使应用程序更具吸引力和专业。
winform一般设定的尺寸
![winform一般设定的尺寸](https://img.taocdn.com/s3/m/8542179727fff705cc1755270722192e453658f7.png)
winform一般设定的尺寸
Winform是一种常用的图形用户界面(GUI)开发工具,它提供了丰富的控件和功能,使得应用程序的界面设计更加简单易用。
在设计Winform应用程序时,一般需要考虑到界面的尺寸问题,以保证用户能够在不同的屏幕分辨率下都能正常使用。
在Winform中,一般会设定应用程序的默认尺寸。
这个尺寸一般是根据用户界面的布局和内容来确定的。
通常情况下,应用程序的尺寸会根据不同的屏幕分辨率自动进行调整,以适应不同屏幕的显示效果。
在设计Winform应用程序时,需要考虑到不同屏幕分辨率下的显示效果。
一般来说,应用程序的界面布局应该是自适应的,即在不同的屏幕分辨率下都能够正常显示,并且控件的大小和位置也要能够自动调整。
为了保证界面的美观和易用性,一般需要根据不同的屏幕分辨率来调整控件的大小和位置。
例如,对于大分辨率的屏幕,可以增大控件的大小,使得用户更容易点击;而对于小分辨率的屏幕,可以缩小控件的大小,以节省屏幕空间。
在设计Winform应用程序时,还需要考虑到用户的使用习惯和习惯。
比如,一般情况下,用户会习惯将应用程序窗口最大化,以充分利用屏幕空间。
因此,在设计界面时,应该尽量避免使用固定尺寸的
控件,而是使用自动调整大小的控件,以适应用户的习惯。
设计Winform应用程序时,需要考虑到界面的尺寸问题,以保证用户能够在不同的屏幕分辨率下都能正常使用。
通过合理的布局和自适应的控件大小,可以提供更好的用户体验。
同时,还需要考虑用户的使用习惯和习惯,以使界面设计更加符合用户的期望。
winform技巧
![winform技巧](https://img.taocdn.com/s3/m/7f790172e418964bcf84b9d528ea81c758f52e8b.png)
winform技巧1.布局管理器布局管理器是WinForm界面布局的重要工具。
它允许我们以一种自适应的方式来组织和布置控件,使得在不同尺寸和分辨率的屏幕上有良好的显示效果。
常见的布局管理器有FlowLayoutPanel、TableLayoutPanel、SplitContainer等。
合理地使用布局管理器可以减少手动计算和设置控件位置和大小的工作量。
2.锚定和对齐在WinForm中,我们可以通过设置控件的锚定和对齐方式来控制控件的位置和大小。
锚定是指控件在父容器中的位置随父容器的大小变化而变化,可以选取上、下、左、右多种锚定方式;对齐是指控件在自己的可用区域中的位置,可以选取左、右、上、下、居中等对齐方式。
合理设置锚定和对齐可以实现控件在不同分辨率和窗口大小下的自适应。
3.事件处理WinForm中的控件通过事件与用户的操作进行交互。
在处理事件时,我们可以使用事件处理器来编写代码响应用户的操作。
常见的事件有按钮的Click事件、文本框的TextChanged事件等。
在事件处理时,我们可以实现一些与用户操作相关的功能,如执行计算、更新界面等。
事件处理器的编写需要注意性能和可读性,可以通过合理地使用异步编程、委托等技术来提高代码效率。
4.数据验证在WinForm中,用户输入的数据往往需要进行有效性验证。
我们可以使用Validating和Validated事件来对数据进行验证和处理。
Validating事件在控件失去焦点之前触发,我们可以在该事件中编写验证逻辑,并通过设置e.Cancel属性来确定是否接受该值;Validated事件在控件失去焦点之后触发,我们可以在该事件中进行相应的数据处理。
合理地使用数据验证可以避免无效数据的输入和处理。
5.消息框和提示框在WinForm中,我们可以使用MessageBox类来显示消息框,通过调用Show方法来显示相应的消息。
MessageBox类提供了多种不同类型的消息框,如提示框、警告框、错误框等。
利用WPF建立自适应窗口大小布局的WinForm窗口
![利用WPF建立自适应窗口大小布局的WinForm窗口](https://img.taocdn.com/s3/m/bdba273d66ec102de2bd960590c69ec3d5bbdbbf.png)
利用WPF建立自适应窗口大小布局的WinForm窗口编写winform程序时,都会碰到一个问题。
就是winform窗口在不同分辨率下的大小问题。
举例说明,你编写的winform窗口在1024×768下是合适、匀称的。
不过,如果用户的计算机的分辨率为1400×900时,你的winform窗口就显得偏小,其中的字体和控件都显得偏小。
如果用户的分辨率为640×480,那你的窗口就远远超过它的屏幕的大小。
如何解决这个问题?一般WinForm程序的操作如下:程序启动--“获取屏幕分辨率--”调整窗体大小--“调整每个控件的大小和位置--”调整每个控件的字体。
这个操作很麻烦,应该考虑各种解决方案。
这样,如果WinForm窗口上有几个控件,调整是一件非常痛苦的事情。
有没有这样的手段。
我只要调整winform窗口的大小,其中的各个控件大小(包括字体)自动的等比例缩放?还记得一些DirectX游戏程序吗?当设置为固定分辨率(如800)×600)时,当屏幕满时,它会自动缩放。
WinForm有这样的方法吗?答案是肯定的。
这个功能可以很容易地在WPF中实现。
利用wpf中的viewbox容器空间。
viewbox是一个容器空间,它会自动缩放容器中的子空间以填满自身,同时它只能有一个子控件。
不过,我们可以把canvas控件作为viewbox控件的子控件。
然后在canvas控件中布局其他的控件。
先看看下面的窗口的xaml文件?1234567891011121314151617先简单的说明这个xaml文件最外层是窗口容器,其标题(wpftest)和大小(400)设置为×300,只能有一个子控件。
window的子控件是dockpanel容器,是自动停靠容器控件。
设置lastchildfill=\,表示最后一个子控件自动填充剩余的空间。
没有设置大小,默认大小是window的客户区大小。
控件随窗体大小改变自动适应
![控件随窗体大小改变自动适应](https://img.taocdn.com/s3/m/93a3c263b84ae45c3b358cc5.png)
Anchor工具顶部和左边
图表B
Anchor工具底部和右边
在Visual Studio中,当控件放置于窗体时,默认的anchor设置是“顶部、左边”,这使得控件和窗体的顶边和左边缘固定相关。
到真正发现不同的anchor设置对控件的影响时,你才能体会到锚定的意义。下面的图像会有所帮助。
要设置一个控件的Dock值,选择Visual Studio中的控件,然后转到属性窗口。你会看到一个标注为“Dock”的属性。点击这个属性的值的部分,会出现一个小窗口让你指定该控件将如何停驻。被赋予各种值的该窗体将显示在以下图像中(图表E、图表F和图表G):
图表E
选择停驻左边
图表F
选择停驻填充
Top——迫使控件位于父窗体(或控件)的顶部。如果有同一个父窗体的其它子控件也被设置为停驻在顶部的话,那么控件将在彼此上方相互堆叠。
Bottom——迫使控件位于父窗体(或控件)的底部。如果有同一个父窗体的其它子控件也被设置为停驻在底部的话,那么控件将在彼此上方相互堆叠。
Left——迫使控件位于父窗体(或控件)的左边。如果有同一个父窗体的其它子控件也被设置为停驻在左边的话,那么控件将在彼此旁边相互堆叠。
Right——表示控件中与父窗体(或父控件)相关的右边缘应该保持固定。
要对一个控件设置Anchor属性,只需在Visual Studio设计器中选择控件,然后转到属性窗口。你会看到一个标注为“Anchor”的属性。点击这个属性值的部分,会出现一个小窗口让你选择想要赋予控件的锚点。图表A所示是选择了“顶边、左边”的anchor设置窗口。图表B所示是选择了“底边、右边”的窗口。
Right——迫使控件位于父窗体(或控件)的右边。如果有同一个父窗体的其它子控件也被设置为停驻在右边的话,那么控件将在彼此旁边相互堆叠。
C#的Winform窗体程序根据桌面大小调整窗体大小【转载】
![C#的Winform窗体程序根据桌面大小调整窗体大小【转载】](https://img.taocdn.com/s3/m/2b724c0da200a6c30c22590102020740be1ecd7a.png)
C#的Winform窗体程序根据桌⾯⼤⼩调整窗体⼤⼩【转载】- 2019-08-20 00:47
在C#的Winform窗体程序开发过程中,有时候可能需要考虑程序运⾏的电脑的桌⾯⼤⼩,Winform窗体程序与⽤户电脑桌⾯的⼤⼩⽐例是经常需要关注的⼀个程序问题,此⽂将介绍Winform窗体程序如何根据⽤户电脑桌⾯的⼤⼩⾃动调整窗体⼤⼩。
在具体的实现过程中需要使⽤到Screen类,Screen类表⽰系统上单个或者多个显⽰设备,可以通过其属性PrimarySereen属性来获取当前的主显⽰信息。
Screen对象中的WorkingArea属性则表⽰当前显⽰器的⼯作区,通过获取当前显⽰的⼯作区即可获取到桌⾯宽度和桌⾯⾼度。
因此可通过获取的桌⾯⾼度和宽度设置窗体⼤⼩。
在窗体程序的Form_Load事件中处理窗体⼤⼩⾃适应的代码如下:
public void Form1_Load(object sender,EventArgs e)
{
int DWidth=Screen.PrimarySereen.WorkingArea.Width;//获取主显⽰设备的桌⾯宽度
int DHeight=Screen.PrimarySereen.WorkingArea.Hight;//获取主显⽰设备的桌⾯⾼度
this.Width=Convert.ToInt32(DWidth*0.9);//设置窗体的宽度为屏幕宽度的0.9倍
this.Height=Convert.ToInt32(DHeight*0.9);//设置窗体的宽度为屏幕⾼度的0.9倍
}。
winform 拉控件到窗体后自动生成的代码
![winform 拉控件到窗体后自动生成的代码](https://img.taocdn.com/s3/m/b358797682c4bb4cf7ec4afe04a1b0717ed5b36d.png)
在WinForms中,当你在设计器中拖动一个控件到窗体上时,Visual Studio会自动为你生成一些代码。
这些代码主要在Form的后台代码文件(通常名为Form1.cs)中。
以下是一个简单的例子,说明当你在WinForms窗体上放置一个Button控件时,Visual Studio会自动生成哪些代码:1. 首先,你需要在工具箱中找到Button控件并将其拖到窗体上。
2. 此时,Form的后台代码文件中会自动生成以下代码:```csharpprivate System.Windows.Forms.Button button1;public Form1(){InitializeComponent();// 以下代码会在窗体加载时自动执行button1 = new System.Windows.Forms.Button();button1.Location = new System.Drawing.Point(10, 10); // 控件的位置 = "button1"; // 控件的名称button1.Size = new System.Drawing.Size(100, 50); // 控件的大小button1.TabIndex = 0; // 控件的Tab键次序// 也可以为button1添加事件处理器this.Controls.Add(this.button1); // 将按钮添加到窗体的Controls集合中}```3. 如果你在设计器中双击该按钮,Visual Studio还会自动为按钮的Click事件添加一个事件处理器。
生成的代码可能如下所示:```csharpprivate void button1_Click(object sender, EventArgs e){// 这里是按钮点击时执行的代码}```注意:以上代码是自动生成的,并且会根据控件类型和设置的不同而有所变化。
winform技巧
![winform技巧](https://img.taocdn.com/s3/m/ed1cad5c0a1c59eef8c75fbfc77da26925c59620.png)
winform技巧在WinForm应用程序的开发过程中,有一些技巧可以帮助提高开发效率并改善用户体验。
以下是一些常用的WinForm技巧:1. 使用布局管理器:WinForm提供了多种布局管理器,如FlowLayoutPanel、TableLayoutPanel等,可以方便地实现窗体中的控件布局。
使用布局管理器可以避免手动设置控件位置和大小的繁琐操作,使控件能够自动适应窗体大小的变化。
2. 使用自定义控件:WinForm提供了多种控件供开发者使用,但是有时候这些控件并不能满足特定需求。
在这种情况下,可以使用自定义控件来扩展或修改现有控件的功能。
自定义控件可以通过继承现有控件或者组合多个控件实现,开发者可以根据需要对其进行自定义样式、事件处理等。
3. 使用错误处理机制:在开发WinForm应用程序时,错误处理是非常重要的。
为了提供良好的用户体验,应用程序应该能够捕获和处理错误,避免应用程序崩溃。
可以使用try-catch语句来捕获异常并在发生错误时显示适当的错误信息,同时可以使用日志记录机制来记录错误信息以便找到和解决问题。
4. 使用数据绑定:WinForm提供了数据绑定功能,可以将数据与控件进行绑定,使数据的改变可以自动反映在控件上,同时用户对控件的操作也能自动更新数据。
使用数据绑定可以简化开发过程,减少手动更新控件内容和处理用户输入的代码量。
5. 使用异步操作:在WinForm应用程序中执行长时间运行的操作(如网络请求、文件读写等)时,不应该阻塞主线程,因为这会导致应用程序无响应。
可以使用异步操作来将长时间运行的操作放在后台线程中执行,这样可以保持应用程序的响应性,同时也可以显示进度条或其它提示信息来告知用户操作的进行状态。
6. 对用户输入进行验证:在接收用户输入时,应该对其进行验证以确保输入的完整性和合法性。
可以使用WinForm提供的输入验证控件(如TextBox控件的Validating和Validated事件)或者自定义验证逻辑来对用户输入进行验证,并在输入有误时显示错误信息。
C#winform中窗体缩放自适应的方法(不同电脑不同分辨率)
![C#winform中窗体缩放自适应的方法(不同电脑不同分辨率)](https://img.taocdn.com/s3/m/e366e33ce3bd960590c69ec3d5bbfd0a7956d5cd.png)
C#winform中窗体缩放⾃适应的⽅法(不同电脑不同分辨率)1. ⾸先在窗体上放上⼀个Panel容器,并将容器的Dock属性设为Fill,即所有的控件都放在了这个容器⾥。
2. 设置缩放窗体时需要⽤到的变量: #region控件缩放double formWidth;//窗体原始宽度double formHeight;//窗体原始⾼度double scaleX;//⽔平缩放⽐例double scaleY;//垂直缩放⽐例Dictionary<string, string> ControlsInfo = new Dictionary<string, string>();//控件中⼼Left,Top,控件Width,控件Height,控件字体Size#endregion3. ⾃定义⼏个⽅法,⽤以实现 (1)获取控件初始信息;GetAllInitInfo() (2)获取窗体缩放⽐例;ControlsChaneInit() (3)窗体改变时修改控件⼤⼩。
ControlsChange()protected void GetAllInitInfo(Control ctrlContainer){if (ctrlContainer.Parent == this)//获取窗体的⾼度和宽度{formWidth = Convert.ToDouble(ctrlContainer.Width);formHeight = Convert.ToDouble(ctrlContainer.Height);}foreach (Control item in ctrlContainer.Controls){if (.Trim() != ""){//添加信息:键值:控件名,内容:据左边距离,距顶部距离,控件宽度,控件⾼度,控件字体。
ControlsInfo.Add(, (item.Left + item.Width / 2) + "," + (item.Top + item.Height / 2) + "," + item.Width + "," + item.Height + "," + item.Font.Size); }if ((item as UserControl) == null && item.Controls.Count > 0){GetAllInitInfo(item);}}}private void ControlsChaneInit(Control ctrlContainer){scaleX = (Convert.ToDouble(ctrlContainer.Width) / formWidth);scaleY = (Convert.ToDouble(ctrlContainer.Height) / formHeight);}///<summary>///改变控件⼤⼩///</summary>///<param name="ctrlContainer"></param>private void ControlsChange(Control ctrlContainer){double[] pos = new double[5];//pos数组保存当前控件中⼼Left,Top,控件Width,控件Height,控件字体Sizeforeach (Control item in ctrlContainer.Controls)//遍历控件{if (.Trim() != "")//如果控件名不是空,则执⾏{if ((item as UserControl) == null && item.Controls.Count > 0)//如果不是⾃定义控件{ControlsChange(item);//循环执⾏}string[] strs = ControlsInfo[].Split(',');//从字典中查出的数据,以‘,’分割成字符串组for (int i = 0; i < 5; i++){pos[i] = Convert.ToDouble(strs[i]);//添加到临时数组}double itemWidth = pos[2] * scaleX; //计算控件宽度,double类型double itemHeight = pos[3] * scaleY; //计算控件⾼度item.Left = Convert.ToInt32(pos[0] * scaleX - itemWidth / 2);//计算控件距离左边距离item.Top = Convert.ToInt32(pos[1] * scaleY - itemHeight / 2);//计算控件距离顶部距离item.Width = Convert.ToInt32(itemWidth);//控件宽度,int类型item.Height = Convert.ToInt32(itemHeight);//控件⾼度item.Font = new Font(, float.Parse((pos[4] * Math.Min(scaleX, scaleY)).ToString()));//字体}}}4. 在窗体类的构造函数中调⽤获取初始数据的⽅法:#region窗体缩放GetAllInitInfo(this.Controls[0]);#endregion5. 在窗体的尺⼨改变的响应事件中加⼊⽅法:private void frmMain_SizeChanged(object sender, EventArgs e){if (ControlsInfo.Count > 0)//如果字典中有数据,即窗体改变{ControlsChangeInit(this.Controls[0]);//表⽰pannel控件ControlsChange(this.Controls[0]);}}经过上述⼏个步骤,即可实现窗体的⾃由缩放,它的基本思想是:通过对控件的尺⼨进⾏重置来实现窗体的⾃适应。
[Winform]DataGridView列自适应宽度
![[Winform]DataGridView列自适应宽度](https://img.taocdn.com/s3/m/3bdef6cba48da0116c175f0e7cd184254a351b53.png)
[Winform]DataGridView列⾃适应宽度在做winform项⽬中,数据控件DataGridView的使⽤多多少少是会⽤到的,如果不设置它的属性,默认情况下是不会⾃适应宽度的,你想查看某项的数据,就不得不将标题栏拖来拖去,挺烦的。
建⼀个⽤于测试的Person类public class Person{[Description("姓名")]public string Name { get; set; }[Description("性别")]public string Gender { get; set; }[Description("地址")]public string Address { get; set; }}winform绑定数据源,及⾃适应列宽代码public partial class PersonInfoForm : Form{public PersonInfoForm(){InitializeComponent();}int width = 0;private void PersonInfoForm_Load(object sender, EventArgs e){List<Person> list = new List<Person>() {new Person(){Name="张三",Gender="男",Address="北京市海淀区⼤钟寺"},new Person(){Name="李斯",Gender="男",Address="上海市"},new Person(){Name="王⼆",Gender="⼥",Address="河南省郑州市⼆七⼴场附近"},new Person(){Name="王⼆",Gender="⼥",Address="河南省郑州市 "},new Person(){Name="王⼆",Gender="⼥",Address="河南省"}};//绑定数据源的做法和原来相同dgViewPersons.DataSource = list;//对于DataGridView的每⼀个列都调整for (int i = 0; i < this.dgViewPersons.Columns.Count; i++){//将每⼀列都调整为⾃动适应模式this.dgViewPersons.AutoResizeColumn(i, DataGridViewAutoSizeColumnMode.AllCells);//记录整个DataGridView的宽度width += this.dgViewPersons.Columns[i].Width;}//判断调整后的宽度与原来设定的宽度的关系,如果是调整后的宽度⼤于原来设定的宽度,//则将DataGridView的列⾃动调整模式设置为显⽰的列即可,//如果是⼩于原来设定的宽度,将模式改为填充。
根据Spread for WinForms表格控件尺寸自适应行高列宽
![根据Spread for WinForms表格控件尺寸自适应行高列宽](https://img.taocdn.com/s3/m/a60d9507c5da50e2524d7f70.png)
}
//行头宽度 float rowHeaderW = 0; for (int i = 0; i < this.fpSpread1.ActiveSheet.RowHeader.ColumnCount; i+ +) {
//垂直滚动条宽度 int vScrollBar = SystemInformation.VerticalScrollBarWidth; //水平滚动条高度 int hScrollBar = SystemInformation.HorizontalScrollBarHeight;
+) ht+1;
//列头高度 float columnHeaderH = 0; for (int i = 0; i < this.fpSpread1.ActiveSheet.ColumnHeader.RowCount; i+
this.fpSpread1.ActiveSheet.Rows[i].Height = averageRowHeight;
}
最终结果如上图所示,赶快去试试吧。
我们需要做的就是按照元素分割 Spread 表格控件,去除固定部分如滚动条、 行列头,剩余部分平均分配给行列。
计算行列头以及滚动条尺寸 平均分配给 Spread 行列
代码如下:
int spreadW = this.fpSpread1.Width; int spreadH = this.fpSpread1.Height;
this.fpSpread1.ActiveSheet.Columns[i].Width = averageColWidth; }
- 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);
}
}
}