C#窗體間傳值方法匯總
當前位置:點晴教程→知識管理交流
→『 技術文檔交流 』
最終效果,就是點主窗體的按鈕,更改子窗體picturebox的圖片: 新建項目,添加一個主窗體Form1和子窗體Form2,我們的任務是,在主窗體點擊按鈕控制子窗體的picturebox控件。 1、第一種方法:Form2子窗體代碼: namespace FormConnections { public partial class Form2 : Form { public Form2() { InitializeComponent(); }
//建立一個公共函數用來更改pictureBox1的圖片 public void SetPic() { pictureBox1.ImageLocation = "c#.jpg"; }
private void pictureBox1_Click(object sender, EventArgs e) { //點擊圖片清空,為了調試用 pictureBox1.Image = null; } } } Form1調用這個函數就可以了: namespace FormConnections { public partial class Form1 : Form { public Form1() { InitializeComponent(); }
//實例化兩個子窗體 Form2 f2 = null;
private void Form1_Load(object sender, EventArgs e) { //打開子窗體 f2 = new Form2(); f2.Show(); }
private void button2_Click(object sender, EventArgs e) { //執行Form2的公共函數 f2.SetPic(); } } } 2、第二種方法,用委托子窗體代碼不變,父窗體代碼: namespace FormConnections { public partial class Form1 : Form { public Form1() { InitializeComponent(); } Form2 f2 = new Form2();
private void Form1_Load(object sender, EventArgs e) { //打開子窗體 f2.Show(); }
private void button2_Click(object sender, EventArgs e) { //用委托去執行子窗體的內容 this.Invoke(new Action(() => { f2.SetPic(); })); } } } 3、第三種方法,用事件解決此類問題父窗體代碼: namespace FormConnections { public partial class Form1 : Form { public Form1() { InitializeComponent(); }
//定義綁定FORM2更改圖片操作的事件 public event EventHandler ChangeForm2Pic;
private void Form1_Load(object sender, EventArgs e) { Form2 f2 = new Form2(); //父窗體加載時,實例化Form2,并綁定事件 ChangeForm2Pic += f2.ChangePicEvent; f2.Show(); }
private void button2_Click(object sender, EventArgs e) { //點擊按鈕,執行事件 ChangeForm2Pic(this, new Form2.PicPathArg() { PicPath = "C#.jpg" }); } } } 子窗體代碼: namespace FormConnections { public partial class Form2 : Form { public Form2() { InitializeComponent(); }
//內部函數 void GoSetPic(string picpath) { pictureBox1.ImageLocation = picpath; }
internal void ChangePicEvent(object sender, EventArgs e) { //執行事件時,得到傳遞來的參數 PicPathArg thepicpath = (PicPathArg)e; //執行內部函數 this.GoSetPic(thepicpath.PicPath); }
public class PicPathArg : EventArgs { //傳遞主窗體的數據信息 public string PicPath { get; set; } }
private void pictureBox1_Click(object sender, EventArgs e) { //點擊圖片清空,為了調試用 pictureBox1.Image = null; } } } 該文章在 2023/5/22 11:17:58 編輯過 |
關鍵字查詢
相關文章
正在查詢... |