溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

C#如何實現(xiàn)不同窗體之間傳遞參數(shù)

發(fā)布時間:2023-02-27 09:47:02 來源:億速云 閱讀:118 作者:iii 欄目:開發(fā)技術(shù)

今天小編給大家分享一下C#如何實現(xiàn)不同窗體之間傳遞參數(shù)的相關(guān)知識點,內(nèi)容詳細,邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。

C#不同窗體之間傳遞參數(shù)

主要兩個內(nèi)容:

①父窗口給子窗口傳遞參數(shù),

②子窗口給父窗口傳遞參數(shù)。

1.父窗口向子窗口傳遞參數(shù)

這個就比較簡單了,級別高一點訪問也輕松一點。具體的原理我就不講了(感覺說不清楚OJ2…),總之使用類的私有變量然后父窗口賦值就可以了。

父窗口(mainForm)代碼:

namespace demo_Params
{
    public partial class mainForm : Form
    {
        public mainForm()
        {
            InitializeComponent();
        }
        
        //傳遞變量到子窗口
        private void btn_Input_BtnClick(object sender, EventArgs e)
        {
            childForm childForm = new childForm();//childForm為新建窗口類
            childForm.str = this.tb_MainFormIn.InputText ;//str為子類的公有變量
            if (childForm.ShowDialog() == DialogResult.OK) return;
        }

        
    }
}

子窗口(childForm)代碼:

namespace demo_Params
{
    public partial class childForm : Form
    {
        public childForm()
        {
            InitializeComponent();
        }

        //私有變量和賦值,value值在父窗口傳遞
        private string w_str;
        public string str
        {
            set
            {
                w_str = value;
            }
        }
        //顯示父窗口的變量到文本框
        private void btn_getPara_BtnClick(object sender, EventArgs e)
        {
            this.tb_childFormIn.Text = w_str;
        }
    }
}

C#如何實現(xiàn)不同窗體之間傳遞參數(shù)

2.子窗口向父窗口傳遞參數(shù)

這個就比較麻煩了,看了很多,自己用起來感覺不錯的是通過委托事件和事件觸發(fā)執(zhí)行函數(shù)來解決參數(shù)的傳遞和接受。道理就不說了,直接COPY用起來。

父窗口(mainForm)代碼:

namespace demo_Params
{
    public partial class mainForm : Form
    {
        public mainForm()
        {
            InitializeComponent();
        }
        //接受參數(shù)初始化
        string str = "";      
        //打開子窗口childForm
        private void btn_openWin_BtnClick(object sender, EventArgs e)
        {

            childForm childForm = new childForm();
            childForm.getParam += new backParam(fun_GetChildParam);//綁定事件
            if (childForm.ShowDialog() == DialogResult.OK) return;
        }
        //委托事件執(zhí)行方法
        void fun_GetChildParam(string w_childpara) 
        {
            str = w_childpara;
        }
        //顯示參數(shù)到文本框,看看參數(shù)能不能調(diào)用
        private void btn_Output_BtnClick(object sender, EventArgs e)
        {
            tb_MainFormOut.InputText = str;
        }
    }
}

子窗口(childForm)代碼:

namespace demo_Params
{

    public delegate void backParam(string str);//聲明委托
    public partial class childForm : Form
    {
        public childForm()
        {
            InitializeComponent();
        }
        public event backParam getParam;//委托事件,接受一個string變量
        
        //傳回變量 關(guān)閉窗口
        private void btn_childFormBack_BtnClick(object sender, EventArgs e)
        {
            getParam(this.tb_childFormIn.Text);//將變量委托
            this.DialogResult = DialogResult.OK;
        }
    }
}

C#如何實現(xiàn)不同窗體之間傳遞參數(shù)
C#如何實現(xiàn)不同窗體之間傳遞參數(shù)

3.代碼說明

兩種傳遞參數(shù)的情況,我寫在了一個程序里面。整理時為了區(qū)分,有所刪改。(子傳父代碼塊內(nèi)不含父傳子內(nèi)容)

直接至WPF項目中,應(yīng)該不能運行。 使用了第三方控件,部分控件屬性、事件命名不同。大家如要復(fù)現(xiàn)使用TextBox和Button即可。

C#子窗體與父窗體之間的參數(shù)傳輸

最近在做項目時涉及到了子窗體與父窗體之間的參數(shù)傳輸問題,通過查閱與學(xué)習(xí)總結(jié)了一種方法。

1.子窗體傳父窗體

Form1為主窗體,F(xiàn)orm2為子窗體。

實現(xiàn):在Form1上添加一個button1,點擊button1后顯示Form2,再點擊Form2的button1 在button1_Click事件中通過this.Owner將Form2的textBox2的值設(shè)置給Form1的textBox1(也可以將Form2中的某個值傳給Form1,然后在Form1進行后續(xù)的處理,將示例代碼修改一下即可)

示例代碼:

    //Form1上的代碼(主窗體)
    public partial class Form1 : Form
    {
        public MainForm()
        {
            InitializeComponent();
        }
        private void button1_Click(object sender, EventArgs e)
        {
            //顯示Form2
            Form2 childForm = new Form2();
            childForm.Show();
            //定義Form2的“爸爸”為Form1 
            calForm.Owner = this;
            
 
            或者
            //Form2 childForm = new Form2();
            //childForm.Show(this);
        }
    }
 
 
    //Form2上的代碼(子窗體)
    public partial class Form2 : Form
    {
        public CalibrationForm()
        {
            InitializeComponent();
        }
        private void button_Click(object sender, EventArgs e)
        {
            MainForm mForm = (MainForm)this.Owner;
            //注意 如果textBox1是放在panel1中的 則先找panel1 再找textBox1
            ((TextBox)mForm.Controls["textBox1"]).Text = this.textBox2.Text;
 
            //也可直接將控件的屬性Modifiers修改為public 然后直接調(diào)用
            mForm.textBox1.Text = this.textBox2.Text;
        }
     }

2.父窗體傳子窗體

Form1為主窗體,F(xiàn)orm2為子窗體。

實現(xiàn):在Form1上添加一個button1,點擊button1后顯示Form2,然后點擊Form2的button1顯示Form1中的某個參數(shù)。(用構(gòu)造函數(shù)來實例化Form2窗體,然后把Form1的this指針傳進去,這樣就可以在Form2中調(diào)用Form1的參數(shù)(此參數(shù)必須是public屬性的))

示例代碼:

    //Form1上的代碼(主窗體)
    public partial class Form1 : Form
    {
        public MainForm()
        {
            InitializeComponent();
        }
        
        public string str = "你好!";
        private void button1_Click(object sender, EventArgs e)
        {
            //實例化子窗體,并將父窗體的指針this傳入
            Form2 childForm = new Form2(this);
            childForm.Show();
        }
    }
 
 
    //Form2上的代碼(子窗體)
    public partial class Form2 : Form
    {
        public CalibrationForm()
        {
            InitializeComponent();
        }
 
        private Form1 frmMain;
        public Form2(Form1 mForm)
        {
            InitializeComponent();
            this.frmMain = mForm;
        }
 
        private void button1_Click(object sender,EventArgs e)
 
        {
 
             this.textBox1.Text = mForm.str;  
 
        }
     }

子窗體與父窗體之間的參數(shù)傳輸方法不止這一種,還可以用委托等,這里只總結(jié)了個人認為較為簡單的一種方法,如果以后涉及委托會進行補充。

以上就是“C#如何實現(xiàn)不同窗體之間傳遞參數(shù)”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學(xué)習(xí)更多的知識,請關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI