新聞中心
本篇文章為大家展示了C#中怎么實現(xiàn)窗體傳值,內(nèi)容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細(xì)介紹希望你能有所收獲。
公共屬性
我們可以在子窗體里面定義一個公共的屬性,然后在父窗體里面給公共屬性賦值,這樣可以實現(xiàn)窗體之間傳值,子窗體代碼如下:
using System;using System.Windows.Forms;namespace DelegateDemo{ public partial class frmChild : Form { public frmChild() { InitializeComponent(); } // 定義一個公共屬性,接收傳遞的值 public string strMessage { get; set; } ///
父窗體代碼:
using System;using System.Windows.Forms;namespace DelegateDemo{ public partial class frmParent : Form { public frmParent() { InitializeComponent(); } ///
這種方式有一個缺點(diǎn):屬性需要設(shè)置為public,不安全。
公共方法
我們還可以在子窗體里面定義一個方法,通過調(diào)用方法傳值,子窗體代碼如下:
using System;using System.Windows.Forms;namespace DelegateDemo{ public partial class frmChild : Form { public frmChild() { InitializeComponent(); } // 定義一個公共屬性,接收傳遞的值 //public string strMessage { get; set; } // 定義屬性為private private string strMessage { get; set; } ///
父窗體代碼:
using System;using System.Windows.Forms;namespace DelegateDemo{ public partial class frmParent : Form { public frmParent() { InitializeComponent(); } ///
這種方式同樣也有缺點(diǎn):屬性雖然是private的了,但是方法還是public的。
委托
上述兩種方式都是不安全,下面我們使用委托來實現(xiàn)窗體之間傳值。
1、定義一個委托
我們在主窗體里面定義一個有參無返回值的委托:
// 定義一個有參無返回值的委托private delegate void SendMessage(string strMessage);
2、實例化一個此委托類型的事件
在父窗體里面定義一個委托類型的事件:
// 定義一個委托類型的事件public event SendMessage sendMessageEvent;
委托與事件的關(guān)系,事件相對于委托更安全,更低耦合。委托是一個類型,事件是委托類型的一個實例。
3、定義要執(zhí)行的方法
這里其實就是在子窗體里面定義一個給控件賦值的方法:
///
4、將方法綁定到事件
frmChild child = new frmChild();// 將方法綁定到事件上sendMessageEvent += new SendMessage(child.SetValue);// 也可以使用下面的簡寫形式// sendMessageEvent += child.SetValue;child.Show();
5、觸發(fā)委托
在按鈕的點(diǎn)擊事件里面觸發(fā)委托:
if(sendMessageEvent!=null){ sendMessageEvent.Invoke(this.txtMessage.Text.Trim());}
上面的代碼中使用的是自定義的委托,我們也可以使用.Net 框架里面自帶的Action泛型委托:
using System;using System.Windows.Forms;namespace DelegateDemo{ public partial class frmParent : Form { // 定義一個有參無返回值的委托 public delegate void SendMessage(string strMessage); // 定義一個委托類型的事件 public event SendMessage sendMessageEvent; public event Action
上述內(nèi)容就是C#中怎么實現(xiàn)窗體傳值,你們學(xué)到知識或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識儲備,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。
網(wǎng)頁標(biāo)題:C#中怎么實現(xiàn)窗體傳值-創(chuàng)新互聯(lián)
本文路徑:http://fisionsoft.com.cn/article/eigge.html