假设在类库中我美化了一个 Form,我称作“MyForm”
//类库
namespace MyNamespace
{
public class MyForm : Form
{
//........
}
}【----------------------------------------------------------------】//应用程序,项目A
using MyNamespace; //调用的类库
namespace ProgramA
{
public partial class TestForm1 : MyForm //继承与类库的 Form1
{
//........
}
public partial class TestForm2 : MyForm //继承与类库的 Form2
{
//........
}}然后在项目 A 里,在指定路径里,比如我们在根目录(与 TestForm 同目录)下创建 ActionTest.cs。
大致内容如下:
namespace ProgramA
{
public class ActionTest
{
//........ public void TestForm1()
{
//........
} public void TestForm2()
{
//........
} //........
}
}
需求是:类库编写者,知道有这个 ActionTest.cs 文件存在,并且知道路径存放位置。
那么,在类库中,我们如何通过不同的 TestForm 去调用 ActionTest.TestFormX?
//类库
namespace MyNamespace
{
public class MyForm : Form
{
//........
}
}【----------------------------------------------------------------】//应用程序,项目A
using MyNamespace; //调用的类库
namespace ProgramA
{
public partial class TestForm1 : MyForm //继承与类库的 Form1
{
//........
}
public partial class TestForm2 : MyForm //继承与类库的 Form2
{
//........
}}然后在项目 A 里,在指定路径里,比如我们在根目录(与 TestForm 同目录)下创建 ActionTest.cs。
大致内容如下:
namespace ProgramA
{
public class ActionTest
{
//........ public void TestForm1()
{
//........
} public void TestForm2()
{
//........
} //........
}
}
需求是:类库编写者,知道有这个 ActionTest.cs 文件存在,并且知道路径存放位置。
那么,在类库中,我们如何通过不同的 TestForm 去调用 ActionTest.TestFormX?
解决方案 »
- INSERT INTO 语句错误
- 怎样让combox 或 日期控件 状态为不下拉状态
- 求email的正则表达式,已经试过google前三页的结果,都是错的。
- 如何通过反射得到一个未知对象的所有属性啊
- 【散分讨论】No.03-Asp.Net开发小技巧
- 利用SqlParameter定義參數的問題,請大俠幫忙!
- ArrayList转化成xml问题
- 如何调用远程com+服务
- 想写一个程序
- 有Windows Media Player播放器 和 Realplayer播放器的源码么?或者是有关Real控件的用法?
- 小妹求助,如何用程序启动另一个打开的VS2005工程
- 如何让一个方法在另一个方法执行数秒后开始执行
我明白你的意思。
但是我看到 ASP.NET MVC 。他就实现了这样的需求。
首先把ProgramA编译成一个dll,然后在类库中添加其引用 public partial class MyForm : Form {
public void CallMethod()
{
ActionTest actionTest=new ActionTest();
Type type = typeof(ActionTest);
System.Reflection.MethodInfo method=type.GetMethod(this.GetType().Name);
method.Invoke(actionTest, null);
}
}
{
private void Call()
{
base.CallMethod();
}
}
string name=strName; //类的名字
Form fm=(Form)Assembly.Load(path).CreateInstance(name);
fm.MdiParent=this.ParentForm;
fm.Show();object target = Assembly.GetExecutingAssembly().CreateInstance("", true);
Type type = new ActionTest.GetType();
MethodInfo methodInfo = type.GetMethod("", BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public);
methodInfo.Invoke(target, null);
(1)类库 (*.DLL) MyForm类
(2)项目A (*.EXE) ProgramA在项目A中
如果类库中实例化Form fm=(Form)Assembly.Load(path).CreateInstance(name); 与项目中正在运行的MyForm是两个实例了,执行方法,效果应该反映不到项目中正在运行的窗体上.问题是:
被引用中的类库中,如何操作(引用)正在运行的项目中的子类实例窗体呢?有办法吗?
应用模型?
简单的说。
比如一个 站点的文件夹结构如下:
Admin
->Roles.aspx
->ChangeRoles.aspx
->AddRoles.aspx
->Users.aspx
->ChangeUsers.aspx
->AddUsers.aspx
......这样如果,把所有的方法集中在一起,那么更方便管理。
我当然知道反射这么用。
我的意思是,这个 ActionTest 你要怎么获得呢?
你好,能否简单示例下?对您的代码,我有点不理解,尤其是前段代码。to lzsh0622:
我最想知道,类库程序集里如何获取项目程序集。
比如最简单,我可以这样。//类库
namespace MyNamespace
{
public class MyForm : Form
{
private void Form_Load(object sender,EventArg e)
{
//..假设,当TestForm1.Show()时,执行 ActionTest.TestForm1() 函数。
}
}
}
使用ActionTest at = new ActionTest();at.TestFrom1();调用。
如果不在同一项目:
一定要引用ProgramA项目或程序集如果层次关系没有办法引用
那就在TestForm定义一个接口IAction(接口中TestFrom1();TestFrom12())让ActionTest实现接口.
在TestForm 定义一个字段pubcli IAction Action;TestForm 调用Action.TestFrom1().
注意程序运行时需要把ActionTest实例赋给Action。
一定要引用ActionTest项目或程序集
应该说,子类 扩展 父类。to zcl24:
你的方案不错。可惜,这样就不是我要的初衷了。