日期:2014-05-18 浏览次数:20810 次
Type t = 对象.GetType(); System.Reflection.EventInfo changed = t.GetEvent("Changed"); Delegate d = Delegate.CreateDelegate(changed.EventHandlerType, eventHandler); changed.AddEventHandler(对象, d);
------解决方案--------------------
终于看明白了,你这表达能力啊...
你要给自己的控件声明一个公共事件比如叫Changed,然后在“当控件实现选中或取消选中”时触发事件....
在调用方,按我4楼的例子反射订阅事件...eventHandler就是你所谓的CheckedChanged,但是要把它的方法签名改成Changed事件委托定义的签名...
------解决方案--------------------
这样会不会简单一点呢??
public partial class UserControl1 : CheckBox { public UserControl1() { InitializeComponent(); } public TabPage TabPage; public TabControl TabControl; protected override void OnCheckedChanged(EventArgs e) { if (TabPage != null) { TabPage.Parent = this.Checked ? TabControl : null; } base.OnCheckedChanged(e); } }
------解决方案--------------------
[Quote=引用:]
11楼的朋友:如果自定义控件或其他文件,如果要在程序发布时,与主程序分别放到不同的目录下,除了反射,还可以用什么方法实现二者的相互调用?能否简单的举个例子?
[/Quote
用Codebase配置:
使用 <codebase> 标记应用程序配置 (.config) 文件
<codebase> 标记指定公共语言运行库在哪里可以找到程序集。 公共语言运行库从.config 文件应用 <codebase> 标记的设置。 <codebase> 标记该设置确定版本和程序集的位置。
<configuration> <runtime> <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> <dependentAssembly> <assemblyIdentity name="MyAssembly2" culture="neutral" publicKeyToken="307041694a995978"/> <codeBase version="1.0.1524.23149" href="FILE://C:/Myassemblies/MyAssembly2.dll"/> </dependentAssembly> </assemblyBinding> </runtime> </configuration>
------解决方案--------------------