窗體A為顯示窗體,窗體B為設定窗體。當窗體B設定完成后,希望A窗體顯示設定的結果。那窗體B如何操作窗體A呢?

方法1:使用窗體的Owner屬性
    步驟 1)在窗體A呼叫窗體B之前,將窗體A賦予窗體B,即 fasSet.Owner = this;表示fasSet(窗體B)擁有窗體A,如下面代碼:
        /// <summary>
        
/// 呼叫窗體B
        
/// </summary>
        void WakeUpForm()
        {
            FmAlarmSet fasSet 
= new FmAlarmSet();
            
//將本窗體設為“設置窗體”所有
            fasSet.Owner = this;
            fasSet.ShowDialog();
        }

    步驟 2)在窗體B中實例化窗體A,這樣窗體B就可以操作窗體A了。如下代碼
            //得到傳入的FmAlarm窗體值
            FmAlarm fa = (FmAlarm)this.Owner;        
            
            
//循環查找FormA中的控件,然后變更控件中的值
            foreach (Control con in fa.Controls)
            {
                
if (con.Name == "txtAlarmContent")
                {
                    ((TextBox)con).Text 
= txtAlarmContent.Text;
                }
            }


方法2:將窗體A作為控件傳入窗體B
    步驟:1)修改窗B的構造函數,加入參數,類型為窗體A
        /// <summary>
        
/// 窗體A變量,定義為全局變量,便於調用
        
/// </summary>
        FmAlarm fa = null;

        
public FmAlarmSet(FmAlarm FmA)
        {
            InitializeComponent();
            fa 
= FmA;
        }

    步驟:2)在窗體 A呼叫窗體方法的參數中加入自己,把自己傳給窗體B。
        /// <summary>
        
/// 呼叫窗體B
        
/// </summary>
        void WakeUpForm()
        {
            FmAlarmSet fasSet 
= new FmAlarmSet(this);
            fasSet.ShowDialog();
        }

    步驟:3)在需要地方調用窗體A即可,如下代碼,改變窗體A中TextBox中的值。
            //循環查找FormA中的控件,然后變更控件中的值
            foreach (Control con in fa.Controls)
            {
                
if (con.Name == "txtAlarmContent")
                {
                    ((TextBox)con).Text 
= txtAlarmContent.Text;
                }
            }