一文帶你快速學(xué)會(huì)C#中WinForm框架的使用詳解
前文提要:
超快速成,零基礎(chǔ)掌握C#開發(fā)中最重要的概念
Label和控件屬性
WinForm是一門非常經(jīng)濟(jì)實(shí)惠的技術(shù),就是說,可以在短時(shí)間內(nèi)學(xué)會(huì),并迅速借此進(jìn)行項(xiàng)目開發(fā)。盡管在很多方面不夠現(xiàn)代,做出來的東西又Low又丑,但絕大多數(shù)的應(yīng)用場景也不需要高端大氣上檔次?;蛟S正是因?yàn)檫@種特點(diǎn),WinForm在工控領(lǐng)域用得非常多,畢竟可以迅速實(shí)現(xiàn)某個(gè)小功能。
在VS中創(chuàng)建新項(xiàng)目,模板為C#Windows窗體應(yīng)用,名稱位置啥的隨便選。
創(chuàng)建成功之后,進(jìn)入設(shè)計(jì)窗口,可以看到默認(rèn)已經(jīng)生成了一個(gè)窗口,如下圖所示,然后就可以愉快地拖控件了,所有控件都在左側(cè)的工具箱里。如果初次打開看不到工具箱,可以試一下快捷鍵Ctrl+Alt+X。
接下來用鼠標(biāo)把工具箱中的Label拖動(dòng)到窗口Form1上面,同時(shí)關(guān)注VS右下角的屬性欄,可以看到Label的屬性,如下圖所示。
當(dāng)然,VS中的很多工具欄都可以拖動(dòng)到任意位置,上圖就是點(diǎn)擊屬性欄的▼標(biāo)志,選擇浮動(dòng),然后拖動(dòng)到了Form1的右側(cè)。
其中,(Name)為這個(gè)Label1控件在程序中的名字,若想在C#中調(diào)用這個(gè)標(biāo)簽,就得用到這個(gè)名字。
拖動(dòng)屬性欄的滾動(dòng)條,在外觀這一標(biāo)題下,有Text屬性,其內(nèi)哦讓那個(gè)為label1,這個(gè)Text是Label1這個(gè)控件所展示出來的字符,將其更改后,窗口上的標(biāo)簽也響應(yīng)發(fā)生變化,就像下圖這樣
外觀這一主題中的參數(shù),在改動(dòng)之后幾乎都沒有什么嚴(yán)重后果,比如各種配色啥的都可以嘗試一番,這里就不一一演示了。
按鈕和回調(diào)邏輯
接下來從工具箱中拖動(dòng)一個(gè)按鈕,即把Button拖動(dòng)到Form1上,將其Text屬性改為新Label;將其Name改為btnChangeLabel。
然后雙擊這個(gè)按鈕,神奇的一幕發(fā)生了,設(shè)計(jì)窗口不見了,取而代之的是我們熟悉的代碼界面,其內(nèi)容為
namespace WinFormsTest { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void btnChangeLabel_Click(object sender, EventArgs e) { } } }
命名空間就不說了,F(xiàn)orm1是一個(gè)繼承了Form的類,而其修飾語中,除了老面孔public,又多了一個(gè)partial,這個(gè)partial表示下面花括號(hào)括起來的代碼,可以是Form1的一部分。更具體一點(diǎn),就是說這個(gè)Form1類可以寫在多個(gè)文件中。
接下來,public Form1(),是Form1的構(gòu)造函數(shù),無需贅言。
再往下,就是剛剛雙擊按鈕所自動(dòng)生成的響應(yīng)函數(shù),其中private表示這個(gè)函數(shù)是個(gè)私有函數(shù),只有在Form1這個(gè)類中才能被調(diào)用。函數(shù)名也是自動(dòng)生成的,包括兩部分,下劃線前面的就是按鈕的名字,下劃線后面Click,表示這個(gè)函數(shù)的觸發(fā)條件是單擊。
然后函數(shù)的輸入?yún)?shù)有兩個(gè),分別是object類型的sender,以及EventArgs類型的e,前者表示剛剛點(diǎn)擊的那個(gè)按鈕,后者表示點(diǎn)擊的這個(gè)動(dòng)作。
梳理一下就是,點(diǎn)擊按鈕是產(chǎn)生了兩個(gè)變量,即按鈕和動(dòng)作,這兩個(gè)變量被傳遞給了btnChangeLabel_Click函數(shù),接下來我們就要寫一下這個(gè)函數(shù)
private void btnChangeLabel_Click(object sender, EventArgs e) { label1.Text = "并沒有新Label,只有新Text"; }
label1就是上一節(jié)創(chuàng)建的Label,label1.Text就是上一節(jié)所說的Label的Text屬性。這個(gè)函數(shù)的意思是,當(dāng)點(diǎn)擊按鈕的時(shí)候,label1的文字發(fā)生變化,效果為
事件
點(diǎn)擊Shift+F7可以從代碼界面返回到設(shè)計(jì)界面,選中按鈕后,查看右下角其對(duì)應(yīng)的屬性欄,可以看到一個(gè)閃電的小圖標(biāo),點(diǎn)擊這個(gè)圖標(biāo),下拉滾動(dòng)條,可以看到操作這個(gè)子標(biāo)題下,有個(gè)Click的操作,其右側(cè)內(nèi)容為btnChangeLabel_Click。
至此,事情的前因后果應(yīng)該就清晰了,按鈕btnChangeLabel正是在這個(gè)小閃電這里,注冊了Click這種操作,并取名為btnChangeLabel_Click,然后才有了代碼界面中的函數(shù)。
在這個(gè)小閃電所對(duì)應(yīng)的列表中,就是可以綁定到按鈕btnChangeLabel中的各種事件,Click只是其中一種。這些事件被詳細(xì)地分門別類,這些類別也很有條理,只有最后一組Key,不知道被哪個(gè)神仙翻譯成了鑰匙,其實(shí)指的應(yīng)該是按鍵吧。
比如,接下來可以注冊一個(gè)KeyDown的命令,在其右側(cè)填入btnTest_KeyDown后然后回車,VS會(huì)自動(dòng)跳回到代碼界面,并已經(jīng)新建好了相應(yīng)的函數(shù)
private void btnTest_KeyDown(object sender, KeyEventArgs e) { }
這是個(gè)鍵盤按鍵觸發(fā)的事件,里面的函數(shù)隨意填寫就好,
接下來從工具箱中拖動(dòng)一個(gè)TextBox到Form1,在右下角的屬性欄里,將其重命名為tbTest。別忘了點(diǎn)擊一下小閃電左邊的小扳手,否則在事件列表中是找不到Name屬性的。
接下來點(diǎn)擊F7,跳轉(zhuǎn)回C#界面,更改在btnTest_KeyDown這個(gè)函數(shù)
private void btnTest_KeyDown(object sender, KeyEventArgs e) { tbTest.Text = $"{e.KeyCode}:啊我被按下了"; }
其中,$字符串早就講過了,可以將花括號(hào)中的數(shù)據(jù)轉(zhuǎn)成字符串。e.KeyCode表示按鍵對(duì)應(yīng)的代碼。
因?yàn)閺?qiáng)迫癥的原因,貌似還得新建一個(gè)對(duì)偶的函數(shù),細(xì)節(jié)就不贅述了,反正寫成如下這樣
private void btnTest_KeyUp(object sender, KeyEventArgs e) { tbTest.Text = $"{e.KeyCode}:嘿嘿我又彈起來了"; }
效果為
常用控件
在設(shè)計(jì)界面,Textbox與Label, Button似乎有點(diǎn)區(qū)別,即選中之后,其右上角會(huì)出現(xiàn)一個(gè)三角?,點(diǎn)擊之后會(huì)出現(xiàn)一個(gè)單選框,內(nèi)容是多行。
也就是說,正常創(chuàng)建的Textbox是不支持回車換行的,但選擇了多行之后,就支持了。
有這種額外內(nèi)容的控件為數(shù)不少,比如ComboBox,下拉選框,將其從工具箱拖動(dòng)到Form1之后,點(diǎn)擊?,選擇編輯項(xiàng),于是彈出了字符串集合編輯器,按照提示,在里面輸入
春
夏
秋
冬
然后運(yùn)行程序,可以自行看看效果。
PictureBox,顧名思義是圖片箱子,將其拖動(dòng)到Form1后,同樣點(diǎn)擊?->選擇圖像,會(huì)彈出選擇資源對(duì)話框,選擇本地資源->導(dǎo)入,就可以把任何一張圖片展示在PictureBox中了。如果圖像尺寸不合適,可以將大小模式選為Zoom。
最后,有三個(gè)簡單控件一直沒來得及說,即CheckBox,LinkLabel以及NumericUpDown,這三個(gè)控件分別是單選框、鏈接標(biāo)簽以及數(shù)值框。
其中,單選框可以與布爾數(shù)據(jù)類型相匹配,其屬性Checked為布爾數(shù)據(jù)類型,故常用于表示某種開關(guān);LinkLabel的外表是有下劃線像鏈接一樣的Label,但其內(nèi)在卻是個(gè)按鈕,可以綁定點(diǎn)擊事件;NumericUpDown的Value屬性為數(shù)值類型,常用于設(shè)置數(shù)值變量。
到此這篇關(guān)于一文帶你快速學(xué)會(huì)C#中WinForm框架的使用詳解的文章就介紹到這了,更多相關(guān)C# WinForm框架內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C#控制臺(tái)程序中使用官方依賴注入的實(shí)現(xiàn)
這篇文章主要介紹了C#控制臺(tái)程序中使用官方依賴注入的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-04-04C# 關(guān)于AppDomain的一些總結(jié)
這篇文章主要介紹了C# 關(guān)于AppDomain的一些總結(jié),幫助大家更好的理解和使用c#,感興趣的朋友可以了解下2021-02-02C# 復(fù)制與刪除文件的實(shí)現(xiàn)方法
這篇文章主要介紹了C# 復(fù)制與刪除文件的實(shí)現(xiàn)方法的相關(guān)資料,希望通過本文能幫助到大家,讓大家理解掌握這部分內(nèi)容,需要的朋友可以參考下2017-10-10c# 使用Task實(shí)現(xiàn)非阻塞式的I/O操作
這篇文章主要介紹了c# 使用Task實(shí)現(xiàn)非阻塞式的I/O操作,幫助大家更好的理解和學(xué)習(xí)c# 編程語言,感興趣的朋友可以了解下2020-11-11