Article / 文章中心

WinForm——窗体

发布时间:2021-11-18 点击数:443

常用属性

StartPosition属性

用来获取或设置运行时窗体的起始位置。

 

语法格式:public FormStartPosition StartPosition { get; set; }

 

属性值:FormStartPosition的枚举值之一,表示窗体的起始位置。说明如下:

 

枚举值

 

说明

 

CenterParent

 

窗体在其父窗体中居中。

 

CenterScreen

 

窗体在当前显示窗口中居中,其尺寸在窗体大小中指定。

 

Manual

 

窗体的位置由 Location 属性确定。

 

WindowsDefaultBounds

 

窗体定位在 Windows 默认位置,其边界也由 Windows 默认决定。

 

WindowsDefaultLocation

 

窗体定位在 Windows 默认位置,其尺寸在窗体大小中指定。

 

 

例:

 

private void Form1_Load(object sender, EventArgs e)

 

       {

 

           this.StartPosition = FormStartPosition.CenterScreen;//设置窗体剧中显示

 

       }

 

Left属性

该属性用来获取或设置窗体的左边缘与其容器的工作区左边缘之间的距离,以像素为单位。

 

语法格式:public int Left { get; set; }

 

Top属性

用来获取或设置窗体的上边缘的 y 坐标(以像素为单位)。

 

  private void Form1_Load(object sender, EventArgs e)

 

   {

 

         this.Left = 100;

 

         this.Top = 200;

 

  }

 

Name属性

用来获取或设置窗体的名称。

 

语法格式:public string Name { get; set; }

 

Location属性

获取或设置窗体的左上角相对桌面的左上角坐标。

 

语法格式:public Point Location { get; set; }

 

例:this.Location = new Point(16, 16);

 

TopMost属性

用来获取或设置一个值,指示该窗体是否显示为最顶层窗体。如果将窗体显示为最顶层则为True,反之为False

 

Width属性

用来获取或设置窗体的宽度。语法格式:public int Width { get; set; }

 

FormBorderStyle属性

表示要为窗体显示的边框样式。 默认值为 FormBorderStyle.Sizable

 

语法格式:public FormBorderStyle FormBorderStyle { get; set; }

 

FormBorderStyle枚举值如下:

 

属性

 

 

意义

 

FormBorderStyle.None

 

0

 

无边框

 

FormBorderStyle.FixedSingle

 

1

 

固定的单行边框

 

FormBorderStyle.Fixed3D

 

2

 

固定的三维样式边框

 

FormBorderStyle.FixedDialog

 

3

 

固定的对话框样式的粗边框

 

FormBorderStyle.Sizable

 

4

 

可调整大小的边框

 

FormBorderStyle.FixedToolWindow

 

5

 

不可调整大小的工具窗口边框

 

FormBorderStyle.SizableToolWindow

 

6

 

可调整大小的工具窗口边框

 

注:使用FixedToolWindowSizableToolWindow时,还需要将ShowInTaskbar属性设置为false。例:this.ShowInTaskbar=false;

 

ShowInTaskbar属性

该属性用来获取或设置一个值,该值指示是否在 Windows 任务栏中显示窗体。

 

ControlBox属性

用来获取或设置一个值,该值指示在该窗体中是否显示最大化、最小化和关闭按钮。。

 

MaximumBox属性

用来获取或设置一个值,该值指示是否在窗体的标题栏中显示最大化按钮。

 

MinimizeBox属性

用来获取或设置一个值,该值指示是否在窗体的标题栏中显示最小化按钮。

 

WindowState属性

用来获取或设置窗体的窗口状态。语法格式:public FormWindowState WindowState { get; set; }

 

枚举值

 

描述

 

Maximized

 

最大化窗口

 

Minimized

 

最小化窗口

 

Normal

 

默认大小的窗口

 

 

RightToLeft属性

用来回去或设置一个值,该值指示是否将控件的元素对齐,以支持从右到左的字体的区域设置。语法格式:public virtual RightToLeft RightToLeft { get; set; }

 

枚举值

 

描述

 

No

 

文本从左至有读取,默认设置。

 

Yes

 

文本从右到左读取。

 

Inherit

 

文本的读取方法从父控件继承

 

BackColor属性

用来获取或设置窗体的背景色。语法格式:public override Color BackColor { get; set; }

 

默认为DefaultBackColor属性的值。

 

BackgroundImage属性

用来获取或设置窗体的背景图像。例:

 

private void Form1_Load(object sender, EventArgs e)

 

{

 

   this.BackgroundImage = Image.FromFile("test.jpg");        

 

}

 

注:上面代码的test.jpg需要放置在程序的Debug文件夹中。

 

BackgroundImageLayout属性

用来获取或设置在ImageLayout枚举中定义的背景图像布局。语法格式如下:

 

public virtual ImageLayout BackgroundImageLayout { get; set; }

 

ImageLayout枚举值说明:

 

枚举值

 

说明

 

None

 

图像沿控件工作区顶部左对齐

 

Tile

 

图像沿控件的矩形工作区平铺

 

Center

 

图像沿控件的矩形工作区居中显示

 

Stretch

 

图像沿空间的矩形工作区拉伸

 

Zoom

 

图像在空间的矩形工作区中放大

 

 

AcceptButton属性

该属性用来获取或设置一个值,该值是一个按钮的名称,当用户按 ENTER 键时就相当于单击了窗体上的该按钮。

 

CancelButton属性

该属性用来获取或设置一个值,该值是一个按钮的名称,当用户按ESC键时就相当于单击了窗体上的该按钮。

 

 

Text属性

该属性是一个字符串属性,用来设置或返回在窗口标题栏中显示的文字。

 

Heigth属性

用来获取或设置窗体的高度。

 

Opacity属性

获取或设置窗体的不透明级别

 

ActiveControl属性

用来获取或设置容器控件中的活动控件。

 

AutoScroll属性

用来获取或设置一个值,该值指示窗体是否实现自动滚动。

 

Enabled属性

用来获取或设置一个值,该值指示控件是否可以对用户交互作出响应。

 

Font属性

用来获取或设置控件显示的文本的字体。

 

ForeColor属性

用来获取或设置控件的前景色。

 

IsMdiChild属性

获取一个值,该值指示该窗体是否为多文档界面 (MDI) 子窗体。

 

IsMdiContainer属性

获取或设置一个值,该值指示窗体是否为多文档界面 (MDI) 中的子窗体的容器。

 

KeyPreview属性

该属性用来获取或设置一个值,该值指示在将按键事件传递到具有焦点的控件前,窗体是否将接收该事件。

 

Visible属性

该属性获取或设置一个值,该值指示是否显示该窗体或控件。

 

Capture属性

如果该属性值为true,则鼠标就会被限定只由此控件响应,不管鼠标是否在此控件的范围内。

 

注:窗体是线程启动测窗体,在主程序关闭时,窗体不能随着主程序关闭时,在主程序的Close()加上Enviroment.Exit(0);

 

使用举例:

功能:窗体背景色渐变

public partial class Form1 : Form

 

   {

 

       public Form1()

 

       {

 

           InitializeComponent();

 

       }

 

       protected override void OnPaintBackground(PaintEventArgs e)

 

       {

 

           int intLocation, intHeight;

 

           intLocation = this.ClientRectangle.Location.Y;

 

           intHeight = this.ClientRectangle.Height / 200;

 

           for (int i = 255; i >= 0; i--)

 

           {          

 

               Color color = Color.FromArgb(1, i, 111);//Color赋值

 

               SolidBrush solid = new SolidBrush(color);//实例化一个单色的画笔类对象。

 

               Pen pen = new Pen(solid, 2);//实例化一个用于绘制直线和曲线的对象pen

 

               e.Graphics.DrawRectangle(pen, this.ClientRectangle.X, intLocation, this.Width, intLocation + intHeight);

 

               intLocation = intLocation + intHeight; //重新为变量inLocation赋值。

 

           }

 

       }

 

}

 

结果:

 

功能:实现字幕在窗体中滚动

 public partial class Form1 : Form

 

   {

 

       public Form1()

 

       {

 

           InitializeComponent();

 

       }

 

       private void timer1_Tick(object sender, EventArgs e)

 

       {

 

           label1.Left -= 2;//设置Label1左边缘与其容器的工作区左边缘之间的距离。

 

           if (label1.Right < 0)//Label1右边缘与其工作区的左边缘自检的距离小于0时,

 

           {

 

               label1.Left = this.Width;//设置lable1左边缘与其容器的工作区左边缘之间的距离为该窗体的宽度。

 

           }

 

       }

 

       private void btnGo_Click(object sender, EventArgs e)

 

       {

 

           timer1.Enabled = true;

 

       }

 

       private void btnStop_Click(object sender, EventArgs e)

 

       {

 

           timer1.Enabled = false;

 

       }

 

       private void btnClose_Click(object sender, EventArgs e)

 

       {

 

           this.Close();

 

       }

 

 }

 

结果:

 

功能:设置闪烁的标题栏

Windows系统中,当程序在后台运行时,如果某个窗体的提示信息要用户浏览,该窗体不停的闪烁,这样就会吸引用户的注意,本实例实现主要用到API函数。

 

API函数FlashWindow可以使窗体闪烁以下语法格式:

 

 [System.Runtime.InteropServices.DllImportAttribute("user32.dll")]

 

public static extern bool FlashWindow(IntPtr handle, bool bInvert);

 

参数说明:handle表示要闪烁的窗体,bInvert表示是否恢复状态。

 

注:利用FalshWidow函数只能时窗体闪烁一下,如果让窗体不停的闪烁就需要使用一个Timer控件每隔一段时间调用该函数。

 

public partial class Form1 : Form

 

   {

 

       public Form1()

 

       {

 

           InitializeComponent();

 

       }

 

       [System.Runtime.InteropServices.DllImportAttribute("user32.dll")]

 

       public static extern bool FlashWindow(IntPtr handle, bool bInvert);

 

       private void btnGo_Click(object sender, EventArgs e)

 

       {

 

           timer1.Enabled = true;

 

       }

 

       private void btnStop_Click(object sender, EventArgs e)

 

       {

 

           timer1.Enabled = false;

 

       }

 

       private void timer1_Tick(object sender, EventArgs e)

 

       {

 

           FlashWindow(this.Handle, true);//启动闪烁函数。

 

       }

 

 }

 

显示窗体的属性信息

显示窗体的属性信息时通过PropertyGrid控件实现的,控件的SelectedObject属性用于获取或设置在网格中显示属性的对象。例:

 

private void Form1_Load(object sender, EventArgs e)

 

       {

 

           propertyGrid1.SelectedObject = this;

 

      }

 

窗体的调用

根据Windows窗体显示的状态,分为模式窗体和无模式窗体。

 

模式窗体使用ShowDialog方法调用,该窗体为当前窗体时,其他窗体不可用,只有当模式窗体关闭时,其他的窗体才可以恢复到可用状态。

 

无模式窗体使用Show方法调用,单击任何其他窗体,则选中的窗体为当前窗体并且显示在屏幕的最前面。

 

模式窗体举例:

 

Frm2 frm=new Frm2();

 

Frm.ShowDialog();

 

非模式窗体的调用:

 

Frm2 frm=new Frm2();

 

Frm.Show();

 

两个不相关的页面进行数据交换

此功能是在做餐博士的时候,有一个这样的需求,当菜品的信息发生改变时,将已经打开的页面信息自动更新。可以理解为观察者模式。

 

namespace CurrentReserving.Model

 

{

        Public delegate void ModelReturnEventHander(object sender,ModelChangedEventArgs e);

 

        public static class ReserveModel

 

        {

                  public static event ModelReturnEventHandler ModelChanged;

 

                  private static GuestReserveInfo _model;

 

                  public static GuestReserveInfo Model

 

                  {

get{return _model;}

 

set{

_model=value;

 

if(ModelChanged!=null&& _model!=null)

 

{

ModelChangedEventArgs ex=new ModelChangedEventArgs(_model);

 

}

 

}

 

}

 

}

 

public class ModelChangedEventArgs:EventArgs

 

{

        private GuestReserverInfo _model;

 

        public ModelChangedEventArgs(GuestReserveInfo _Model)

 

        {

                  _model=_Mode;

 

}

 

public GuestReserveInfo Model

 

{

        get{ return _model;}

 

}

 

}

 

}

 

修改信息后,执行修改信息发送

 

private void btnChangeInfo_Click(object sender,EventArgs e)

 

{

ReserveModel.Model=table._reserveInfo;

 

}

 

接受信息的页面,订阅事件

 

public CurrentTableStatusPage()

 

{

        InitializeComponent();

 

        ReserveModel.ModelChanged+=new ModeReturnEventHander(ReserveModel_ModelChanged);

 

 

}

 

void Reservel_ModelChanged(object sender,ModelChangedEventArgs e)

 

{

        GuestReserveInfo reserveInfo=ReserveModel.Model;

 

}

 

使用匿名方法防止窗体假死的现象

程序执行时,如果有大量的方法在主线程中等待执行,则或造成窗体出现假死的现象,本实例通过使用匿名的方法实现防止窗体出现假死的现象。

 

       private void Form1_Load(object sender, EventArgs e)

 

       {

 

           Thread th = new Thread(() =>

 

             {

 

                 Invoke((MethodInvoker)(() =>

 

                 {

 

                     long sun = 0;

 

                     for (long i = 0; i < 1000000000; i++)

 

                     {

 

                         sun += i;

 

                                         

 

                     }

 

                     label1.Text = sun.ToString();

 

                 }

 

             ));

 

             });

 

           th.IsBackground = true;

 

           th.Start();

 

       }

 

启动窗体的位置在上次关闭窗体的位置。

通过在注册表中读写窗体的Location属性来实现的。在窗体关闭前处理窗体的FormClosed时间,将窗体的Location属性值写入注册表,然后在窗体的Load事件中从注册表中读取保存的数据,设置窗体的Location属性值,从而实现了从上次关闭的位置启动窗体的功能。

 

        读写注册表主要通过RegistryKey类的Get Value方法和Set Value方法来实现的。

 

       private void Form1_Load(object sender, EventArgs e)

 

       {

 

           RegistryKey myReg1, myReg2;//声明之策表对象。

 

           myReg1 = Registry.CurrentUser;//获取当前用户注册表项。

 

           try

 

           {

 

               myReg2 = myReg1.CreateSubKey("Software\\MySoft");//在注册表中创建子项

 

               this.Location = new Point(Convert.ToInt16(myReg2.GetValue("1")), Convert.ToInt16(myReg2.GetValue("2")));//设置窗体的显示位置。

 

 

           }

 

           catch

 

           {

 

           }

 

       }

 

       private void Form1_FormClosed(object sender, FormClosedEventArgs e)

 

       {

 

           RegistryKey myReg1, myReg2;

 

           myReg1 = Registry.CurrentUser;

 

           myReg2 = myReg1.CreateSubKey("Software\\MySoft");

 

           try

 

           {

 

               myReg2.SetValue("1", this.Location.X.ToString());

 

               myReg2.SetValue("2", this.Location.Y.ToString());

 

           }

 

           catch

 

           { }

 

       }

 

根据桌面的大小来调整窗体的大小

screen类便是单个系统上的一个或多个显示设备,其PrimaryScreen属性用来获取到主显示,概述信返回一个screen对象,而调用screen对象的WorkingArea属性可以获取显示器的工作区。

 

       private void Form1_Load(object sender, EventArgs e)

 

       {

 

           int deskWidth = Screen.PrimaryScreen.WorkingArea.Width;

 

           int deskHeight = Screen.PrimaryScreen.WorkingArea.Height;

 

           this.Width = Convert.ToInt32(deskWidth * 0.8);

 

           this.Height = Convert.ToInt32(deskHeight * 0.8);

 

       }

 

  • 如何在exe文件上加上图标

exe的项目文件上右键选择属性-》选择应用程序-》图标和清单-》图标,选择相应的图片。

 

 

版权声明:本文内容转发自阿里云社区,由阿里云实名注册用户自发贡献版权归原作者所有。本站不拥有其著作权,亦不承担相应法律责任。如果您发现本中有涉嫌抄袭的内容,请联系站内客服,本将立刻删除涉嫌侵权内容。