c#中窗體與窗體之間值的傳遞

方法一:利用set\get構造類的公有成員函數

###問題

Form2爲主窗體,子窗體Form6的值→子窗體Form3中

###代碼

主窗體Form2:

namespace GPS222
{
    public partial class Form2 : Form
    {
            Form3 form3 = new Form3();//子窗體Form3
            Form6 form6 = new Form6();//子窗體Form6
            public Form2()
            {
            	InitializeComponent();
            	
            	form3.trans_BaudRate = form6.trans_BaudRate;
                form3.trans_PortName = form6.trans_PortName;
                form3.Show(this.dockPanel1);//子窗體Form6和子窗體Form3在dockPanel1中
            }
     }
 }

子窗體Form6:

using WeifenLuo.WinFormsUI.Docking;
namespace GPS222
{
    public partial class Form6 : DockContent
    {
        private string BaudRate = null;
        private string PortName = null;
        public Form6()
        {
            InitializeComponent();
            
            BaudRate = "115200";
            PortName = "com1";       
             
        }
     
        public string trans_BaudRate
        {
            get
            {
                return BaudRate;
            }
        }
        public string trans_PortName
        {
            get
            {
                return PortName;
            }
        }            
     }
 }

子窗體Form3:

using WeifenLuo.WinFormsUI.Docking;
namespace GPS222
{
    public partial class Form3: DockContent
    {
        private string BaudRate = null;
        private string PortName = null;
        public Form3()
        {
            InitializeComponent();
        }
        public string trans_BaudRate
        {
            set
            {
                BaudRate = value;
            }
            get
            {
                return BaudRate;
            }
        }
        public string trans_PortName
        {
            set
            {
                PortName = value;
            }
            get
            {
                return PortName;
            }
        }
        private void gbtnopen_Click(object sender, EventArgs e)
        {
            //Form3和Form6之間傳值驗證
            Text1.Text = this.BaudRate;
            Text2.Text = this.PortName;
        }        
     }
 }

方法二:利用類的公有數據成員(相當於方法一的簡化,最好用!)

###問題

Form2爲主窗體,子窗體Form6的值→子窗體Form3中

###代碼

主窗體Form2:

namespace GPS222
{
    public partial class Form2 : Form
    {
            Form3 form3 = new Form3();//子窗體Form3
            Form6 form6 = new Form6();//子窗體Form6
            public Form2()
            {
                InitializeComponent();
                
                form3.BaudRate = form6.BaudRate;
                form3.PortName = form6.PortName;
                form3.Show(this.dockPanel1);//子窗體Form6和子窗體Form3在dockPanel1中
          }
     }
 }

子窗體Form6:

using WeifenLuo.WinFormsUI.Docking;
namespace GPS222
{
    public partial class Form6: DockContent
    {
        public string BaudRate = null;//private ---> public
        public string PortName = null;
        public Form6()
        {
            InitializeComponent();
            
            BaudRate = "115200";
            PortName = "com1"; 
        }
     }
 }      

子窗體Form3:

using WeifenLuo.WinFormsUI.Docking;
namespace GPS222
{
    public partial class Form3: DockContent
    {
        public string BaudRate = null;//private ---> public
        public string PortName = null;
        public Form3()
        {
            InitializeComponent();
        }
        private void gbtnopen_Click(object sender, EventArgs e)
        {
            //Form3和Form6之間傳值驗證
            Text1.Text = this.BaudRate;
            Text2.Text = this.PortName;
        }
     }
 }
             

方法三:通過構造類,一次性在窗體間傳遞多個值

###問題

Form2爲主窗體,子窗體Form7的多個值→子窗體Form4中

###代碼

所構造的類Net_Parameter:

namespace GPS222
{
    public class Net_Parameter//類應爲public訪問控制屬性
    {
    	//所要傳遞的多個值均定義爲Net_Parameter類的公有數據成員
        public Byte partten_index;
        public Byte data_index;
        public bool save_data;
        public string MAC_addr;
        public Byte speed_index;
        public string time;
        public string num_frame;
        public string data_per_frame;
        public string textBox6;
        public string textBox8;
        public Net_Parameter(Byte p_i, Byte d_i, bool s_d, string M_a, Byte s_i, string t, string n_f, string d_p_f,                   string tB6, string tB8)
        {
            partten_index = p_i;
            data_index = d_i;
            save_data = s_d;
            MAC_addr = M_a;
            speed_index = s_i;
            time = t;
            num_frame = n_f;
            data_per_frame = d_p_f;
            textBox6 = tB6;//文件保存地址
            textBox8 = tB8;//文件發送地址
        }
     }
 }

主窗體Form2:

namespace GPS222
{
    public partial class Form2 : Form
    {
            Form4 form4 = new Form4();//子窗體Form4
            Form7 form7 = new Form7();//子窗體Form7
            public Form2()
            {
                InitializeComponent();
                form4.trans_net_parameter = form7.trans_net_parameter;
                form4.Show(this.dockPanel1);
                 
         }
     }
 }

子窗體Form7:

using WeifenLuo.WinFormsUI.Docking;
namespace GPS222
{ 
    public partial class Form7 : DockContent
    {
        Net_Parameter net_parameter=new Net_Parameter(0, 0, false, "", 0, "", "", "", "", "");//私有數據成員,僅可類的內部使用
        public Form7()
        {
            InitializeComponent();
            
            net_parameter.partten_index = 1;
            net_parameter.data_index = 1;
            net_parameter.save_data = true;
            net_parameter.MAC_addr = "123456789012";
            net_parameter.speed_index = 1;
            net_parameter.time = "1";
            net_parameter.num_frame = "12";
            net_parameter.data_per_frame = "256";
            net_parameter.textBox6 = "1234";
            net_parameter.textBox8 ="123";
        }
        public Net_Parameter trans_net_parameter
        {
            get
            {
                return net_parameter;
            }
        }
   }
}                                             

子窗體Form4:

using WeifenLuo.WinFormsUI.Docking;
namespace GPS222
{
    public partial class Form4 : DockContent
    {
        Net_Parameter net_parameter = new Net_Parameter(0, 0, false, "", 0, "", "", "", "", "");
        public Form4()
        {
            InitializeComponent();                 
        }       
        public Net_Parameter trans_net_parameter
        {
            set
            {
                net_parameter = value;
            }
            get
            {
                return net_parameter;
            }
        }
        private void gbtnopen_Click(object sender, EventArgs e)
        {
            //Form4和Form7之間傳值驗證
            Text1.Text = net_parameter.textBox6;
            Text2.Text = net_parameter.textBox8;
        }
                        
     }
     
 }

方法四:設置公有靜態變量static

方法五:owner使得子窗體可以直接調用主窗體中函數

###參考

C#中如何在兩個子窗體間傳遞參數
C#怎麼把結構體從A窗體傳到B窗體,在B窗體改變結構體的值後並返回到A窗體?

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章