我的控件中要刷新數據,需要重新執行windows Form的Load事件,該如何引用呀?

解决方案 »

  1.   

    Form1_Load(this, EventArgs.Empty);
      

  2.   

    各位,不是直接調用,是Form所屬的控件,其通過this.FindForm(),找到所屬Form,再如何調用Form的Load事件的問題
      

  3.   

    这样做(再次调用Form_Load的响应函数)不好。需要再次调用的代码,最好独立出来。比如以下代码,控件中要再次刷新数据,可以这样调用
    (this.Parent as Form1).MyInitialization();
    class Form1 : Form
    {
       void Form1_Load(object sender, EventArgs e)
       {
          //...
          MyInitialization();
       }   public void MyInitialization()
       {
          //刷新数据
       }
    }
      

  4.   

    把load里的代码写成另外的方法,再调用.
      

  5.   

    大哥,那樣,我上百个Form都得要去修改,如果可以直接调用控件所属Form的Load方法,可以少修改好多地方;如果需要,可以再手工修改。
      

  6.   

    如果load方法是public的可以这么掉public void Form1_Load( object sender , EventArgs e )
            {
                MessageBox.Show( "test" );
            }        private void button2_Click( object sender , EventArgs e )
            {
                object[] obj = new object[2];
                obj[0] = button2.FindForm();
                obj[1] = new EventArgs();
                button2.FindForm().GetType().GetMethod( "Form1_Load" ).Invoke( this , obj );
            }
      

  7.   

    那这样看来,只有修改Form的Load事件的为Public的了,有其它的办法吗?
      

  8.   

    用反射直接调用即可
    object[] obj=new object[2];
    obj[0]=this.FindForm();
    obj[1]=new EventArgs();
    MethodBase b = this.FindForm().GetType().GetMethod(this.FindForm().Name + "_Load", BindingFlags.Instance | BindingFlags.NonPublic);
    if(b!=null)
    b.Invoke(this.FindForm(), obj);
    可参考以下代码:
    反射的查看类型信息:ms-help://MS.VSCC.v80/MS.MSDN.v80/MS.VisualStudio.v80.chs/dv_fxadvance/html/7e7303a9-4064-4738-b4e7-b75974ed70d2.htm下面的示例使用所有的反射 *Info 类以及 BindingFlags 来列出指定类的所有成员(构造函数、字段、属性、事件和方法),并将这些成员划分为静态和实例类别。
    // This program lists all the members of the 
    // System.IO.BufferedStream class.
    using System;
    using System.IO;
    using System.Reflection;class ListMembers {
        public static void Main(String[] args) {
            // Specifies the class.
            Type t = typeof (System.IO.BufferedStream);
            Console.WriteLine ("Listing all the members (public and non public) of the {0} type", t);        // Lists static fields first.
            FieldInfo [] fi = t.GetFields (BindingFlags.Static | 
             BindingFlags.NonPublic | BindingFlags.Public);
            Console.WriteLine ("// Static Fields");
            PrintMembers (fi);        // Static properties.
            PropertyInfo [] pi = t.GetProperties (BindingFlags.Static | 
             BindingFlags.NonPublic | BindingFlags.Public);
            Console.WriteLine ("// Static Properties");
            PrintMembers (pi);        // Static events.
            EventInfo [] ei = t.GetEvents (BindingFlags.Static | 
             BindingFlags.NonPublic | BindingFlags.Public);
            Console.WriteLine ("// Static Events");
            PrintMembers (ei);        // Static methods.
            MethodInfo [] mi = t.GetMethods (BindingFlags.Static | 
             BindingFlags.NonPublic | BindingFlags.Public);
            Console.WriteLine ("// Static Methods");
            PrintMembers (mi);        // Constructors.
            ConstructorInfo [] ci = t.GetConstructors (BindingFlags.Instance | 
             BindingFlags.NonPublic | BindingFlags.Public);
            Console.WriteLine ("// Constructors");
            PrintMembers (ci);        // Instance fields.
            fi = t.GetFields (BindingFlags.Instance | BindingFlags.NonPublic | 
             BindingFlags.Public);
            Console.WriteLine ("// Instance Fields");
            PrintMembers (fi);        // Instance properites.
            pi = t.GetProperties (BindingFlags.Instance | BindingFlags.NonPublic | 
             BindingFlags.Public);
            Console.WriteLine ("// Instance Properties");
            PrintMembers (pi);        // Instance events.
            ei = t.GetEvents (BindingFlags.Instance | BindingFlags.NonPublic | 
             BindingFlags.Public);
            Console.WriteLine ("// Instance Events");
            PrintMembers (ei);        // Instance methods.
            mi = t.GetMethods (BindingFlags.Instance | BindingFlags.NonPublic   
             | BindingFlags.Public);
            Console.WriteLine ("// Instance Methods");
            PrintMembers (mi);        Console.WriteLine ("\r\nPress ENTER to exit.");
            Console.Read();
        }    public static void PrintMembers (MemberInfo [] ms) {
            foreach (MemberInfo m in ms) {
                Console.WriteLine ("{0}{1}", "     ", m);
            }
            Console.WriteLine();
        }