概述
本文主要讲解了如何将一个用.NET开发的窗体,部署到PDMS中。在阅读本文之前,建议先阅读《PDMS .NET开发》作为前置课程。
.NET开发
新建.NET项目
PDMS只接受类库的插件形式。引入
Aveva.ApplicationFramework、Aveva.ApplicationFramework.Presentation
两个DLL文件。
新建用户控件
在解决方案中,右键添加一个用户控件。用户控件名称为
HelloMenuControl
并在用户控件上加入一个label控件。
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLiAzNfRHLGZkRGZkRfJ3bs92YsYTMfVmepNHL9EFVPFzZU9EMFRVT3V1MMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2X0hXZ0xCMx81dvRWYoNHLrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZuBnL5ADNzATMxUTM5ITOwkTMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
自定义接口类
接口类需要继承自
IAddin
接口,并重写方法。
namespace MyAddin
{
public class MyAddin : IAddin
{
// 设置插件的名称
public string Name {
get { return "hello"; }
}
// 设置插件的描述
public string Description {
get { return "hello"; }
}
// 重写Starta方法
public void Start(ServiceManager serviceManager)
{
// 获取WINDOWS服务
WindowManager windowManager = (WindowManager)serviceManager.GetService(typeof(WindowManager));
// 实例化窗体对象,并定义其属性
HelloMenuControl MyControl = new HelloMenuControl();
// CreateDockedWindow的参数1和command的Key保持一致,参数2和Title保持一致
DockedWindow window = windowManager.CreateDockedWindow("My.Hello", "hello", MyControl, DockedPosition.Right);
window.SaveLayout = true;
// 获取Command服务
CommandManager commandManager = (CommandManager)serviceManager.GetService(typeof(CommandManager));
// 添加自定义的Command到服务中
MyCommand command = new MyCommand(window);
commandManager.Commands.Add(command);
}
public void Stop()
{
throw new NotImplementedException();
}
}
}
自定义Command类
namespace MyAddin
{
public class MyCommand : Command
{
// 创建窗口的私有变量
private Aveva.ApplicationFramework.Presentation.DockedWindow _window;
// 带参实例化类
public MyCommand(DockedWindow window)
{
// 定义command的Key,这个key是要在PDMS中显示的,命名规则应该为公司名+功能名
this.Key = "My.Hello";
// Save the docked window
_window = window;
// 创建窗体关闭的事件委托
_window.Closed += new EventHandler(_window_Closed);
// 创建窗体加载事件的委托
WindowManager.Instance.WindowLayoutLoaded += new EventHandler(Instance_WindowLayoutLoaded);
}
// 设置默认窗体不打开
void Instance_WindowLayoutLoaded(object sender, EventArgs e)
{
_window.Visible = false;
// Update the command state to match initial window visibility
this.Checked = _window.Visible;
}
void _window_Closed(object sender, EventArgs e)
{
// Update the command state when the window is closed
this.Checked = false;
}
// 重构执行方法
public override void Execute()
{
//打开窗体
_window.Title = "hello";
_window.Show();
}
}
}
PDMS部署
以下步骤详细说明,请参考前文《PDMS .NET开发》
- 拷贝DLL文件到PDMS目录
- 修改XML文件
- 进入PDMS
新建按钮
在工具栏处右键,选择customize。新增加一个子菜单,并在右侧的界面中进行命名,此处我们名为HelloMenu。
新建一个按钮,名为HelloButton。
为该按钮添加我们自己开发的动态库
将该按钮拖动到需要的menu下,完成定义。