Winform窗體傳值的方法(示例)
進(jìn)行用C#來開發(fā)windows應(yīng)用程序項(xiàng)目時(shí),不同窗口之間傳值有很多種不同的方法, 假設(shè)項(xiàng)目中有兩個(gè)窗體,F(xiàn)orm1和Form2,要實(shí)現(xiàn)的效果是:點(diǎn)擊Form1中的按鈕打開From2,點(diǎn)擊Form2中的按鈕改變窗體Form1的背景顏色。
示例一:
點(diǎn)擊Form1中的按鈕打開From2,點(diǎn)擊Form2中的按鈕改變窗體Form1的背景顏色。
Form1的代碼:
public partial class Form : Form { public Form() { InitializeComponent(); } private void button_Click(object sender, EventArgs e) { //通過Form的構(gòu)造函數(shù)將Form對(duì)象傳遞到Form中 Form form = new Form(this); form.Show(); } }
Form2的代碼:
public partial class Form : Form { //首先在Form中定義Form類型字段用來存儲(chǔ)Form對(duì)象 Form form=null; Random r = new Random(); public Form() { InitializeComponent(); } public Form(Form form):this() { //通過構(gòu)造方法將Form對(duì)象給Form字段賦值 form = form; } private void button_Click(object sender, EventArgs e) { //隨機(jī)改變Form的背景顏色 form.BackColor = Color.FromArgb(r.Next(),r.Next(),r.Next()); } }
示例二:
假設(shè)項(xiàng)目中有兩個(gè)窗體,F(xiàn)orm1和Form2,要實(shí)現(xiàn)的效果是點(diǎn)擊Form1中的Button1按鈕實(shí)現(xiàn)TextBox1和TextBox2中的值相加,然后把這個(gè)相加的值傳遞給Form2中的TextBox1,并在TextBox1中顯示出這個(gè)和值。
通過為窗體類寫屬性來傳遞值
(1),在被傳遞值的窗體(這里是Form2)類里面寫屬性
private string str;//定義的私有變量 public string STR//為窗體Form2定義的屬性 { get //讀 { return str; } set//寫 { str = value; } }
(2),在Form2中把讀到的屬性賦給Form2中的TextBox1文本框
private void Form2_Load(object sender, EventArgs e)
{
textBox1.Text = str;
}
(3),在Form1中的Button1的Click點(diǎn)擊事件中寫如下代碼
private void button1_Click(object sender, EventArgs e)
{
Form2 frm2 = new Form2();
int a, b, sum;
if (int.TryParse(textBox1.Text, out a) && int.TryParse(textBox2.Text, out b))//關(guān)于TryParse的使用方法,見補(bǔ)充知識(shí)。
{
sum = a + b;
frm2.STR = sum.ToString();
frm2.ShowDialog();
}
else
{
frm2.STR = "輸入的為非數(shù)字型字符串";
frm2.ShowDialog();
}
}
大功告成,在你的機(jī)子上運(yùn)行下,是不是成功了?
補(bǔ)充知識(shí):
parse,tryparse區(qū)別
Convert.ToInt32,int.Parse(),int.TryParse,(int) 四者都可以解釋為將類型轉(zhuǎn)換為 int,那它們的區(qū)別是什么呢?
Convert.ToInt32 與 int.Parse 較為類似,實(shí)際上 Convert.ToInt32 內(nèi)部調(diào)用了 int.Parse:
Convert.ToInt32 參數(shù)為 null 時(shí),返回 0;
int.Parse 參數(shù)為 null 時(shí),拋出異常。
Convert.ToInt32 參數(shù)為 "" 時(shí),拋出異常;
int.Parse 參數(shù)為 "" 時(shí),拋出異常。
Convert.ToInt32 可以轉(zhuǎn)換的類型較多;
int.Parse 只能轉(zhuǎn)換數(shù)字類型的字符串。
int.TryParse 與 int.Parse 又較為類似,但它不會(huì)產(chǎn)生異常,轉(zhuǎn)換成功返回 true,轉(zhuǎn)換失敗返回 false。最后一個(gè)參數(shù)為輸出值,如果轉(zhuǎn)換失敗,輸出值為 0。
int m;
if(int.TryParse("2"),out m)
{
...
}
返回true ,運(yùn)行{}內(nèi),并給m賦值為2;
if(int.TryParse("ddd"),out m)
{
...
}
返回false,不運(yùn)行if{}內(nèi),并給m賦值為0;
使用Parse和TryParse轉(zhuǎn)換數(shù)字字符串
基本數(shù)字類型包含Parse和TryParse方法,可用于將數(shù)字字符串轉(zhuǎn)換為指定的數(shù)字類型,例如:
TryParse方法是.NET2.0中引入的,它能提供有條件的解析。這個(gè)方法會(huì)返回一個(gè)布爾值,以指示解析是否成功,從而可以免去添加異常處理代碼的麻煩。下面的例子使用了一個(gè)Int32類型來演示TryParse的兩種形式:
在第二種形式中,第一個(gè)參數(shù)是要解析的文本字符串,第二個(gè)參數(shù)是NumberStyles枚舉類型,它說明了輸入字符串中可能包含的內(nèi)容,返回值將放在第四個(gè)參數(shù)中返回。
以上就是Winform窗體傳值的方法(示例),希望對(duì)大家有所幫助。
相關(guān)文章
C#?中?List?與?List?多層嵌套不改變原值的實(shí)現(xiàn)方法(深度復(fù)制)
這篇文章主要介紹了C#?中?List?與?List?多層嵌套不改變原值的實(shí)現(xiàn)方法,使用?BinaryFormatter?將原始?List?序列化為字節(jié)流,然后再反序列化得到新的?List,實(shí)現(xiàn)了深度復(fù)制,需要的朋友可以參考下2024-03-03C# 獲取當(dāng)前總毫秒數(shù)的實(shí)例講解
這篇文章主要介紹了C# 獲取當(dāng)前總毫秒數(shù)的實(shí)例講解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2021-01-01C#開發(fā)WinForm根據(jù)條件改變DataGridView行顏色
這篇文章介紹了C#開發(fā)WinForm根據(jù)條件改變DataGridView行顏色的方法,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-03-03C#如何實(shí)現(xiàn)調(diào)取釘釘考勤接口的功能
這篇文章主要介紹了C#如何實(shí)現(xiàn)調(diào)取釘釘考勤接口的功能,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-08-08C#里SuperSocket庫不能發(fā)現(xiàn)命令的原因
這篇文章主要介紹C#里SuperSocket庫不能發(fā)現(xiàn)命令的原因,在使用SuperSocket來寫服務(wù)器的過程中,這是一個(gè)非??焖俚拈_發(fā)方式,也非常好用。不過學(xué)習(xí)的曲線有點(diǎn)高,在使用的過程中經(jīng)常會(huì)遇到各種各樣的問題。下面來看看學(xué)習(xí)舉例說明吧2021-10-10