WinForm——窗體
常用屬性
StartPosition屬性
用來獲取或設(shè)置運行時窗體的起始位置。
語法格式:public FormStartPosition StartPosition { get; set; }
屬性值:FormStartPosition的枚舉值之一,表示窗體的起始位置。說明如下:
枚舉值
說明
CenterParent
窗體在其父窗體中居中。
CenterScreen
窗體在當(dāng)前顯示窗口中居中,其尺寸在窗體大小中指定。
Manual
窗體的位置由 Location 屬性確定。
WindowsDefaultBounds
窗體定位在 Windows 默認(rèn)位置,其邊界也由 Windows 默認(rèn)決定。
WindowsDefaultLocation
窗體定位在 Windows 默認(rèn)位置,其尺寸在窗體大小中指定。
例:
private void Form1_Load(object sender, EventArgs e)
{
this.StartPosition = FormStartPosition.CenterScreen;//設(shè)置窗體劇中顯示
}
Left屬性
該屬性用來獲取或設(shè)置窗體的左邊緣與其容器的工作區(qū)左邊緣之間的距離,以像素為單位。
語法格式:public int Left { get; set; }
Top屬性
用來獲取或設(shè)置窗體的上邊緣的 y 坐標(biāo)(以像素為單位)。
private void Form1_Load(object sender, EventArgs e)
{
this.Left = 100;
this.Top = 200;
}
Name屬性
用來獲取或設(shè)置窗體的名稱。
語法格式:public string Name { get; set; }
Location屬性
獲取或設(shè)置窗體的左上角相對桌面的左上角坐標(biāo)。
語法格式:public Point Location { get; set; }
例:this.Location = new Point(16, 16);
TopMost屬性
用來獲取或設(shè)置一個值,指示該窗體是否顯示為最頂層窗體。如果將窗體顯示為最頂層則為True,反之為False。
Width屬性
用來獲取或設(shè)置窗體的寬度。語法格式:public int Width { get; set; }
FormBorderStyle屬性
表示要為窗體顯示的邊框樣式。 默認(rèn)值為 FormBorderStyle.Sizable。
語法格式:public FormBorderStyle FormBorderStyle { get; set; }
FormBorderStyle枚舉值如下:
屬性
值
意義
FormBorderStyle.None
0
無邊框
FormBorderStyle.FixedSingle
1
固定的單行邊框
FormBorderStyle.Fixed3D
2
固定的三維樣式邊框
FormBorderStyle.FixedDialog
3
固定的對話框樣式的粗邊框
FormBorderStyle.Sizable
4
可調(diào)整大小的邊框
FormBorderStyle.FixedToolWindow
5
不可調(diào)整大小的工具窗口邊框
FormBorderStyle.SizableToolWindow
6
可調(diào)整大小的工具窗口邊框
注:使用FixedToolWindow和SizableToolWindow時,還需要將ShowInTaskbar屬性設(shè)置為false。例:this.ShowInTaskbar=false;
ShowInTaskbar屬性
該屬性用來獲取或設(shè)置一個值,該值指示是否在 Windows 任務(wù)欄中顯示窗體。
ControlBox屬性
用來獲取或設(shè)置一個值,該值指示在該窗體中是否顯示最大化、最小化和關(guān)閉按鈕。。
MaximumBox屬性
用來獲取或設(shè)置一個值,該值指示是否在窗體的標(biāo)題欄中顯示最大化按鈕。
MinimizeBox屬性
用來獲取或設(shè)置一個值,該值指示是否在窗體的標(biāo)題欄中顯示最小化按鈕。
WindowState屬性
用來獲取或設(shè)置窗體的窗口狀態(tài)。語法格式:public FormWindowState WindowState { get; set; }
枚舉值
描述
Maximized
最大化窗口
Minimized
最小化窗口
Normal
默認(rèn)大小的窗口
RightToLeft屬性
用來回去或設(shè)置一個值,該值指示是否將控件的元素對齊,以支持從右到左的字體的區(qū)域設(shè)置。語法格式:public virtual RightToLeft RightToLeft { get; set; }
枚舉值
描述
No
文本從左至有讀取,默認(rèn)設(shè)置。
Yes
文本從右到左讀取。
Inherit
文本的讀取方法從父控件繼承
BackColor屬性
用來獲取或設(shè)置窗體的背景色。語法格式:public override Color BackColor { get; set; }
默認(rèn)為DefaultBackColor屬性的值。
BackgroundImage屬性
用來獲取或設(shè)置窗體的背景圖像。例:
private void Form1_Load(object sender, EventArgs e)
{
this.BackgroundImage = Image.FromFile("test.jpg");
}
注:上面代碼的test.jpg需要放置在程序的Debug文件夾中。
BackgroundImageLayout屬性
用來獲取或設(shè)置在ImageLayout枚舉中定義的背景圖像布局。語法格式如下:
public virtual ImageLayout BackgroundImageLayout { get; set; }
ImageLayout枚舉值說明:
枚舉值
說明
None
圖像沿控件工作區(qū)頂部左對齊
Tile
圖像沿控件的矩形工作區(qū)平鋪
Center
圖像沿控件的矩形工作區(qū)居中顯示
Stretch
圖像沿空間的矩形工作區(qū)拉伸
Zoom
圖像在空間的矩形工作區(qū)中放大
AcceptButton屬性
該屬性用來獲取或設(shè)置一個值,該值是一個按鈕的名稱,當(dāng)用戶按 ENTER 鍵時就相當(dāng)于單擊了窗體上的該按鈕。
CancelButton屬性
該屬性用來獲取或設(shè)置一個值,該值是一個按鈕的名稱,當(dāng)用戶按ESC鍵時就相當(dāng)于單擊了窗體上的該按鈕。
Text屬性
該屬性是一個字符串屬性,用來設(shè)置或返回在窗口標(biāo)題欄中顯示的文字。
Heigth屬性
用來獲取或設(shè)置窗體的高度。
Opacity屬性
獲取或設(shè)置窗體的不透明級別
ActiveControl屬性
用來獲取或設(shè)置容器控件中的活動控件。
AutoScroll屬性
用來獲取或設(shè)置一個值,該值指示窗體是否實現(xiàn)自動滾動。
Enabled屬性
用來獲取或設(shè)置一個值,該值指示控件是否可以對用戶交互作出響應(yīng)。
Font屬性
用來獲取或設(shè)置控件顯示的文本的字體。
ForeColor屬性
用來獲取或設(shè)置控件的前景色。
IsMdiChild屬性
獲取一個值,該值指示該窗體是否為多文檔界面 (MDI) 子窗體。
IsMdiContainer屬性
獲取或設(shè)置一個值,該值指示窗體是否為多文檔界面 (MDI) 中的子窗體的容器。
KeyPreview屬性
該屬性用來獲取或設(shè)置一個值,該值指示在將按鍵事件傳遞到具有焦點的控件前,窗體是否將接收該事件。
Visible屬性
該屬性獲取或設(shè)置一個值,該值指示是否顯示該窗體或控件。
Capture屬性
如果該屬性值為true,則鼠標(biāo)就會被限定只由此控件響應(yīng),不管鼠標(biāo)是否在此控件的范圍內(nèi)。
注:窗體是線程啟動測窗體,在主程序關(guān)閉時,窗體不能隨著主程序關(guān)閉時,在主程序的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賦值。
}
}
}
結(jié)果:
功能:實現(xiàn)字幕在窗體中滾動
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void timer1_Tick(object sender, EventArgs e)
{
label1.Left -= 2;//設(shè)置Label1左邊緣與其容器的工作區(qū)左邊緣之間的距離。
if (label1.Right < 0)//當(dāng)Label1右邊緣與其工作區(qū)的左邊緣自檢的距離小于0時,
{
label1.Left = this.Width;//設(shè)置lable1左邊緣與其容器的工作區(qū)左邊緣之間的距離為該窗體的寬度。
}
}
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();
}
}
結(jié)果:
功能:設(shè)置閃爍的標(biāo)題欄
在Windows系統(tǒng)中,當(dāng)程序在后臺運行時,如果某個窗體的提示信息要用戶瀏覽,該窗體不停的閃爍,這樣就會吸引用戶的注意,本實例實現(xiàn)主要用到API函數(shù)。
API函數(shù)FlashWindow可以使窗體閃爍以下語法格式:
[System.Runtime.InteropServices.DllImportAttribute("user32.dll")]
public static extern bool FlashWindow(IntPtr handle, bool bInvert);
參數(shù)說明:handle表示要閃爍的窗體,bInvert表示是否恢復(fù)狀態(tài)。
注:利用FalshWidow函數(shù)只能時窗體閃爍一下,如果讓窗體不停的閃爍就需要使用一個Timer控件每隔一段時間調(diào)用該函數(shù)。
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);//啟動閃爍函數(shù)。
}
}
顯示窗體的屬性信息
顯示窗體的屬性信息時通過PropertyGrid控件實現(xiàn)的,控件的SelectedObject屬性用于獲取或設(shè)置在網(wǎng)格中顯示屬性的對象。例:
private void Form1_Load(object sender, EventArgs e)
{
propertyGrid1.SelectedObject = this;
}
窗體的調(diào)用
根據(jù)Windows窗體顯示的狀態(tài),分為模式窗體和無模式窗體。
模式窗體使用ShowDialog方法調(diào)用,該窗體為當(dāng)前窗體時,其他窗體不可用,只有當(dāng)模式窗體關(guān)閉時,其他的窗體才可以恢復(fù)到可用狀態(tài)。
無模式窗體使用Show方法調(diào)用,單擊任何其他窗體,則選中的窗體為當(dāng)前窗體并且顯示在屏幕的最前面。
模式窗體舉例:
Frm2 frm=new Frm2();
Frm.ShowDialog();
非模式窗體的調(diào)用:
Frm2 frm=new Frm2();
Frm.Show();
兩個不相關(guān)的頁面進行數(shù)據(jù)交換
此功能是在做餐博士的時候,有一個這樣的需求,當(dāng)菜品的信息發(fā)生改變時,將已經(jīng)打開的頁面信息自動更新??梢岳斫鉃橛^察者模式。
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;}
}
}
}
修改信息后,執(zhí)行修改信息發(fā)送
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;
}
使用匿名方法防止窗體假死的現(xiàn)象
程序執(zhí)行時,如果有大量的方法在主線程中等待執(zhí)行,則或造成窗體出現(xiàn)假死的現(xiàn)象,本實例通過使用匿名的方法實現(xiàn)防止窗體出現(xiàn)假死的現(xiàn)象。
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();
}
啟動窗體的位置在上次關(guān)閉窗體的位置。
通過在注冊表中讀寫窗體的Location屬性來實現(xiàn)的。在窗體關(guān)閉前處理窗體的FormClosed時間,將窗體的Location屬性值寫入注冊表,然后在窗體的Load事件中從注冊表中讀取保存的數(shù)據(jù),設(shè)置窗體的Location屬性值,從而實現(xiàn)了從上次關(guān)閉的位置啟動窗體的功能。
讀寫注冊表主要通過RegistryKey類的Get Value方法和Set Value方法來實現(xiàn)的。
private void Form1_Load(object sender, EventArgs e)
{
RegistryKey myReg1, myReg2;//聲明之策表對象。
myReg1 = Registry.CurrentUser;//獲取當(dāng)前用戶注冊表項。
try
{
myReg2 = myReg1.CreateSubKey("Software\\MySoft");//在注冊表中創(chuàng)建子項
this.Location = new Point(Convert.ToInt16(myReg2.GetValue("1")), Convert.ToInt16(myReg2.GetValue("2")));//設(shè)置窗體的顯示位置。
}
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
{ }
}
根據(jù)桌面的大小來調(diào)整窗體的大小
screen類便是單個系統(tǒng)上的一個或多個顯示設(shè)備,其PrimaryScreen屬性用來獲取到主顯示,概述信返回一個screen對象,而調(diào)用screen對象的WorkingArea屬性可以獲取顯示器的工作區(qū)。
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文件上加上圖標(biāo)
在exe的項目文件上右鍵選擇屬性-》選擇應(yīng)用程序-》圖標(biāo)和清單-》圖標(biāo),選擇相應(yīng)的圖片。
版權(quán)聲明:本文內(nèi)容轉(zhuǎn)發(fā)自阿里云社區(qū),由阿里云實名注冊用戶自發(fā)貢獻!版權(quán)歸原作者所有。本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本文中有涉嫌抄襲的內(nèi)容,請聯(lián)系站內(nèi)客服,本站將立刻刪除涉嫌侵權(quán)內(nèi)容。