Palettset和调色板新手问题。
我想从winform应用程序迁移到paletteset。我有在Winform中创建的公共方法和属性,但是在将代码移动到调色板(用户控件)后,我不再能够通过Paletteset?!下面是一些伪代码...(注意:我在这里也提出了这个问题:http://forums . Autodesk . com/t5/net/palette set-and-palette-newbie-question/TD-p/5525512)
公共类my plugin:IExtensionApplication {
私有文档m _ Adoc
private PaletteSet m _ PaletteSet = null;
私有系统。windows . forms . control m _ UC palette = null;
使IExtensionApplication无效。初始化(){
应用程序。document manager . DocumentActivated+= new DocumentCollectionEventHandler(monitordocumentactivated);
如果(应用程序。document manager . Count > 0){
this . m _ Adoc = Application。document manager . get document(hostapplicationservices。working database);
}
}
取消IExtensionApplication。Terminate() {
this。unload plugin();
}
private void monitor documentactivated(object sender,DocumentCollectionEventArgs e){
if(e . Document!= null){
this . m _ Adoc = e . Document;
如果(!this.m_Adoc。IsReadOnly)这个。load plugin();
} else {
if (m_MyPalettset!= null) {这个。unload plugin();}
}
}
私有void LoadPlugin() {
if (Tools。IsRegApp()) {
this。LoadPalettset();
} else {
//在此处执行其他操作....
}
}
private void LoadPalettset(){
this . m _ PaletteSet = new PaletteSet(" earth bound指示器工具",Guid。parse(guid));
this.m_PaletteSet。Style = PaletteSetStyles。show properties menu | PaletteSetStyles。ShowAutoHideButton | PaletteSetStyles。可抓取;
this . m _ UC palette = new my palette();
this.m_PaletteSet。Add("ucPalette ",m _ UC palette);
this.m_PaletteSet。MinimumSize =新系统。图纸。尺寸(350,535);
this.m_PaletteSet。SetSize(新系统。图纸。尺寸(350,535));
this.m_PaletteSet。enable transparency(true);
this.m_PaletteSet。位置=新系统。绘图.点(400,400);
this.m_PaletteSet。可见=真;
this.m_PaletteSet。码头边。无|码头区。左侧|码头区。对;
this.m_PaletteSet。码头=码头边。无;
this.m_PaletteSet。state changed+= new PaletteSetStateEventHandler(MonitorPaletteState);
//比方说,我想调用我在m_ucPalette中公开的自定义方法
//我如何从这里访问该方法?
//就此而言,我如何获得对调色板上任何其他控件的访问权限呢?
//注意:在这个练习中,我试图理解如何在这个InitClass和Paletteset上的控件之间进行通信。
}
私有void UnLoadPlugin() {...}
}
谢谢!
**** Hidden Message ***** 如果你的方法在你的窗体类中被声明为公共的,那么从代码的粗体部分调用它们应该没有问题。
将控件作为属性公开,也可以在突出显示的代码部分访问它们。
一旦您在突出显示的代码块之外,您必须让窗体对用户作出反应,控制将传递到您的窗体。 抱歉,看起来我在描述我想做的事情方面做得很差。我想完全放弃使用winform,开始只使用Palettes。所以从我的InitClass中,我希望能够访问Palette(用户控件和我为它创建的任何公共属性和方法,即控件)。
例如,假设我有一组我正在绘图中跟踪的块。我的调色板有这些块的列表或数据网格视图。用户擦除了其中一个或多个块。他们正在通过命令行删除该块。利用绘图数据库和文档事件处理程序,我希望能够调用一个方法或以某种方式通知调色板,该块或多个块需要从列表或数据网格视图中删除。
在我的工作中,这是通过调用我公开的一个方法来完成的,并且工作得很好。
相同的方法现在在调色板上,但我看不出现在它在调色板集上与该方法通信的方法,为什么?
我希望像这样访问它:m_Palettset.ucPalette.MyMethod();
PaletteSet只是一个容器。您需要在其中放置一些东西,例如WinForm、ElementHost或我最喜欢的WPF控件。
我不是一个温特诺的人,我不确定您如何响应文档/数据库事件。在WPF中,我会创建一个ViewModel,将ViewModel绑定到WPF用户控件,并在Document/Database事件中更改ViewModel s属性。 正如MexicanCustard所说,您的调色板集和调色板必须定义为公共,才能从粗体部分访问它们。您当前将它们定义为私有。至少在你之前发布的代码中
只要将它们设置为私有,这绝对不会发生。 试试看这个视频。DevTV:AutoCAD简介。Net编程。在大约1小时2分钟的视频中,作者(Fenton Webb)展示了他如何使用事件根据数据库中添加和删除的对象从调色板中添加和删除对象。
页:
[1]