控件中如何调用windows Form中的Load事件呀

cnjack 2008-12-18 11:37:49
我的控件中要刷新數據,需要重新執行windows Form的Load事件,該如何引用呀?
...全文
557 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
cnjack 2008-12-19
  • 打赏
  • 举报
回复
用反射直接调用即可
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();
}
mykelly6 2008-12-18
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 GTX280 的回复:]
直接调用Load事件函数就行
[/Quote]
up
GTX280 2008-12-18
  • 打赏
  • 举报
回复
直接调用Load事件函数就行
长沙三毛 2008-12-18
  • 打赏
  • 举报
回复
Form1_Load(this, EventArgs.Empty);
cnjack 2008-12-18
  • 打赏
  • 举报
回复
我倒是喜欢10楼的方法,可惜只能是公用的才行
cnjack 2008-12-18
  • 打赏
  • 举报
回复
不知道哪位知道用反射呀?
gsmlove 2008-12-18
  • 打赏
  • 举报
回复
用委托
zgke 2008-12-18
  • 打赏
  • 举报
回复
Form1_Load(null,null)?
cnjack 2008-12-18
  • 打赏
  • 举报
回复
那这样看来,只有修改Form的Load事件的为Public的了,有其它的办法吗?
journeydj 2008-12-18
  • 打赏
  • 举报
回复
如果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 );
}

yuanhuiqiao 2008-12-18
  • 打赏
  • 举报
回复
帮顶
cnjack 2008-12-18
  • 打赏
  • 举报
回复
大哥,那樣,我上百个Form都得要去修改,如果可以直接调用控件所属Form的Load方法,可以少修改好多地方;如果需要,可以再手工修改。
bbbbbb888888 2008-12-18
  • 打赏
  • 举报
回复
把load里的代码写成另外的方法,再调用.
gomoku 2008-12-18
  • 打赏
  • 举报
回复
这样做(再次调用Form_Load的响应函数)不好。

需要再次调用的代码,最好独立出来。比如以下代码,控件中要再次刷新数据,可以这样调用
(this.Parent as Form1).MyInitialization();


class Form1 : Form
{
void Form1_Load(object sender, EventArgs e)
{
//...
MyInitialization();
}

public void MyInitialization()
{
//刷新数据
}
}
patrickpan 2008-12-18
  • 打赏
  • 举报
回复
用委托。
cnjack 2008-12-18
  • 打赏
  • 举报
回复
各位,不是直接調用,是Form所屬的控件,其通過this.FindForm(),找到所屬Form,再如何調用Form的Load事件的問題

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧