乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 211|回复: 13

调色板的麻烦...

[复制链接]

154

主题

1274

帖子

8

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1936
发表于 2018-8-8 20:52:50 | 显示全部楼层 |阅读模式
我一直在考虑将我的所有应用程序表单转换为调色板,以更好地集成应用程序,并使其更便于用户使用。为此,我在我的WPF类项目中添加了以下内容:
[CommandMethod(“Test”)]
公共无效测试()
{
调色板集ps=新调色板集(“测试调色板”)
usercontrol tc=newusercontrol()
ps.Add(“测试”,tc)
ps.Visible=true
}
公共类用户控件
{
公共用户控制()
{
}
}
它编译得很好,加载没有问题,但是当在命令行调用“Test”时,我收到了一个错误“没有为这个对象定义无参数构造函数”
显然我遗漏了一些东西,但我就是看不到。

本帖以下内容被隐藏保护;需要你回复后,才能看到!

游客,如果您要查看本帖隐藏内容请回复
回复

使用道具 举报

154

主题

1274

帖子

8

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1936
发表于 2018-8-8 22:03:57 | 显示全部楼层
这很管用...太糟糕了,这些示例没有谈论使调用函数静态[命令方法("测试")]。
公共静态无效测试()。
{。
PaletteSet ps=new PaletteSet("TestPalette");。
userControl tc=new userControl();。
ps.Add(测试,tc);。
ps.Visible=true;。
}。

公共类用户控制。
{。
公共用户控制()。
{。
}。
}。
回复

使用道具 举报

15

主题

687

帖子

169

银币

中流砥柱

Rank: 25

铜币
582
发表于 2018-8-9 01:47:50 | 显示全部楼层
嗨,
您可以查看最近的消息。
回复

使用道具 举报

4

主题

219

帖子

4

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
238
发表于 2018-8-9 09:44:21 | 显示全部楼层

命令方法可以是静态的或非静态的。
您没有显示命令方法“测试”所在的类(命令类?)的所有代码。但是,根据您原始帖子中显示的错误消息,该类似乎有一个需要输入参数的构造函数。如果是这种情况,至少可以说它会有问题,或者可能容易出现错误,因为在AutoCAD中。NET插件中的命令类(或定义了命令方法的类)不会被您的代码实例化(因此您可以选择何时“新建”您的类;相反,它是在执行命令方法时由Autocad实例化的:如果命令方法是静态的,则在Application ationConext中创建类的实例,如果命令方法是非静态的,则在每个文档中创建类的实例。
因此,在构造函数中使用构造函数或使用一些过程逻辑可能会导致意想不到的副作用。如果您需要类级别的一些数据,请在IExtensionApplication.Initialize()中初始化/操作它们(如果它们需要在加载时初始化);或者在命令方法中执行。
回复

使用道具 举报

154

主题

1274

帖子

8

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1936
发表于 2018-8-9 11:39:29 | 显示全部楼层

通过将用户表单中的所有内容复制/粘贴到我的用户控件(以及所有相关代码),我已经成功地将表单移植到调色板。我确实有大约100件东西需要修理,但它正在工作
我就是这么想的。
我没有显示该类的其余部分,因为该类中只有命令。这是一个基本类:
名称空间TTA
{
公共类命令
{
专用命令()
{
}
}
}
现在我看了一下,也许它是私有构造函数……但话说回来,向导就是这样构建的。。。
回复

使用道具 举报

24

主题

204

帖子

6

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
300
发表于 2018-8-9 13:01:41 | 显示全部楼层
确保您为您的调色板提供一个指南,以便用户的首选项在会话之间进行。我还将我的WPF调色板包装在ElementHost中,这有助于调整大小。var paletteSet=new PaletteSet("My Palette",new Guid("{5624342D-F672-4B0D-957E-D61127B25F76}")。
{。
样式=PaletteSetStyles.ShowAutoHideButton|PaletteSetStyles.ShowCloseButton|。
PaletteSetStyles.Snappable,。
最小大小=新大小(200,400),。
KeepFocus=false。
};。
var host=new ElementHost{Autosize=true, Dock=DockStyle.Fill};。
paletteSet.Add(我的调色板,主机);。
var调色板=新的MyPalette();。
host.Child=调色板;。
回复

使用道具 举报

154

主题

1274

帖子

8

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1936
发表于 2018-8-9 14:55:35 | 显示全部楼层
我刚刚遇到了一个以前从未见过的问题,我的调色板有一个按钮,提示用户在屏幕上选择一个点来插入块。因为调色板有些宽,所以我让它在按钮被点击时向上滚动。无论如何,它工作得很好,除非调色板是停靠的,当然它不会卷起来..因此..使用我从Autodesk大学偷来的一些代码,我修补了该事件,以取消停靠调色板并将其卷起。然而....现在,我的代码似乎跳过了几行代码,并生成了一个错误。违规代码:    if(PS,码头。等于(码头边,无))。
{。
如果(ps,Style.Equals(32))。
{。
ps,style = 0;。
}。
ps,AutoRollUp = true。
ps,可见=假;。
ps,可见=真;。
}。
否则。
{。
ps,码头=码头边,无;。
ps,AutoRollUp = true。
ps,可见=假;。
ps,可见=真;。
}。

//......。
//传递给BlockJig的值在此调用之前进行验证。

if(调用方,Name == "btnInsert")。
{。
BlockReference br = insert,BlockJig(bName,attData,rotAngle,rotBehavior,bScale,lay);。
//如果behavior设置为0,则设置第一次插入后所有后续插入的旋转角度。
if(选项,RotBehavior == 0 && x == 0)。
{。
rotAngle = br,旋转;。
}。
//捕获最后的旋转角度,以防我们需要存储它。
选项,旋转= br,旋转;//。
}还有一种计时器,它触发一次,然后自动关闭,它做的事情和上面一样,只是简单地将AutoRollUp设置为true,并循环调色板的可见性以实现更改。
回复

使用道具 举报

154

主题

1274

帖子

8

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1936
发表于 2018-8-9 16:21:41 | 显示全部楼层
我已经将GUID添加到混合中,现在当调色板恢复时,选项卡将丢失,直到最小化并重新打开为止。
回复

使用道具 举报

154

主题

1274

帖子

8

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1936
发表于 2018-8-9 18:31:03 | 显示全部楼层
只要我们讨论调色板,就有一些程序设置存储在注册表中。我构建了一个检索和存储它们的类,它多年来一直运行良好。移动到调色板会导致一点问题,我不知道如何解决...即将更新的值写回注册表。
当用户单击应用程序中的OK或Apply按钮并在用户再次访问表单时重新加载值时,我一直在处理它(表单每次关闭时都被释放)。
基本上流程是:
创建一个新的表单类
在加载事件期间读取设置
做一些事情
当用户单击应用或OK时保存设置
调色板有一个加载事件,所以我可以读取设置,然后做我需要做的事情,然后做什么?每次用户更改调色板上的值时都不需要保存设置?似乎有点多余或效率低下。
回复

使用道具 举报

85

主题

404

帖子

7

银币

中流砥柱

Rank: 25

铜币
751
发表于 2018-8-9 21:27:20 | 显示全部楼层
是的,但是我已经删除了按钮,所以它感觉更像一个本地工具。
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-2-4 09:04 , Processed in 0.160458 second(s), 72 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表