父窗口订阅子窗口的容易子窗口怎么订阅父窗口的怎么处理?
也就是让父窗口中一变量变化及时传递到至窗口中去

解决方案 »

  1.   

    既然是父子关系,用自定义事件是可以解决问题的。这个最经典的窗口传值问题。
    1.在子窗口定义一个事件
    2.在父窗口中调用子窗口的地方将子窗口的事件注册,即指定自定义事件发生时处理事件的方法
    3.在父窗口中写一个自定义事件发生时处理事件的方法,用于和2相关联
    4.在子窗口需要回传值得地方触发事件给你一个例子,自己看看
       /// <summary>
        /// 当数字键,空格,enter按下时,将值传回textbox
        /// </summary>
        /// <param name="str">要回传的值</param>
        public delegate void SetTextBoxValue(string str);//在命名空间下声明    //子窗口
        public partial class ListForm1 : Form
        {
            public ListForm1()
            {
                InitializeComponent();
            }
            
             /// <summary>
            /// 用来将值回传到textbox
            /// </summary>
            public event SetTextBoxValue SetTxtValue;        /// <summary>
            /// Listbox被选中的索引改变
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
            {
                //得到原始的数据,去掉行号
                string strBackValue = GetOriginalItems(this.listBox1.SelectedItem.ToString());
                SetTxtValue(strBackValue);//将选中的Listbox中的值传回到要输入的文本框中,触发自定义事件
            }
        }//父窗口
    public partial class NurseDegree : Telerik.WinControls.UI.RadForm
        {
            private void lblInput_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
            {
                        listForm.SetTxtValue += new SetTextBoxValue(listForm_SetTxtValue);//在父窗口订阅子窗口事件
             }
                /// <summary>
            /// 事件传值关联方法
            /// </summary>
            /// <param name="str">传回来的string</param>
            void listForm_SetTxtValue(string str)
            {
              //doSomething
            }
        }