C# CAD PaletteSet.Dock停靠操作

在AutoCAD的.NET API中,PaletteSet对象(例如上述代码中的ps)还可以进行停靠操作。调用与Dock相关的方法通常会将调色板集停靠到应用程序主窗口的特定区域或边缘。

cs 复制代码
Autodesk.AutoCAD.Windows.PaletteSet ps = new PaletteSet("宗地属性面板");
ps.Dock(Autodesk.AutoCAD.Windows.DockSides.Left); // 将调色板集停靠在主窗口的左侧

DockSides枚举提供了几个选项来指定停靠的位置,包括Left、Right、Top和Bottom等。

ps.DockEnabled 属性

cs 复制代码
ps.DockEnabled = true; // 允许调色板集进行停靠
cs 复制代码
ps.DockEnabled = false; // 禁止调色板集进行停靠
cs 复制代码
public static void DoIt()
        {
            if (ps==null)
            {
                //use constructor with Guid so that we can save/load user data
                ps = new Autodesk.AutoCAD.Windows.PaletteSet("Test Palette Set",new Guid("63B8DB5B-10E4-4924-B8A2-A9CF9158E4F6"));
                ps.Load+=new Autodesk.AutoCAD.Windows.PalettePersistEventHandler(ps_Load);
                ps.Save+=new Autodesk.AutoCAD.Windows.PalettePersistEventHandler(ps_Save);
                ps.Style = Autodesk.AutoCAD.Windows.PaletteSetStyles.NameEditable |
                    Autodesk.AutoCAD.Windows.PaletteSetStyles.ShowPropertiesMenu |
                    Autodesk.AutoCAD.Windows.PaletteSetStyles.ShowAutoHideButton |
                    Autodesk.AutoCAD.Windows.PaletteSetStyles.ShowCloseButton;
                ps.MinimumSize = new System.Drawing.Size(300,300);
                ps.Add("Test Palette 1", new TestControl());
            }
            bool b = ps.Visible;

            ps.Visible = true;
            Autodesk.AutoCAD.EditorInput.Editor e = AcadApp.DocumentManager.MdiActiveDocument.Editor;

            Autodesk.AutoCAD.EditorInput.PromptResult res = e.GetKeywords("Select a palette set option:","Opacity","TitleBarLocation","Docking");
            if (res.Status == Autodesk.AutoCAD.EditorInput.PromptStatus.OK)
            {
                switch (res.StringResult)
                {
                    case "Opacity":
                        Autodesk.AutoCAD.EditorInput.PromptIntegerResult resInt;
                        do
                        {
                            resInt = e.GetInteger("Enter opacity:");
                            if (resInt.Status != Autodesk.AutoCAD.EditorInput.PromptStatus.OK)
                                break;
                            if (resInt.Value>=0 && resInt.Value<=100)
                                break;
                            e.WriteMessage("Opacity must be between 0 and 100\n");
                        }
                        while (true);
                        ps.Opacity = resInt.Value;
                        break;
                    case "TitleBarLocation":
                        res = e.GetKeywords("Select titlebar location:","Left","Right");
                        if (res.Status == Autodesk.AutoCAD.EditorInput.PromptStatus.OK)
                            switch (res.StringResult)
                            {
                                case "Left":
                                    ps.TitleBarLocation = Autodesk.AutoCAD.Windows.PaletteSetTitleBarLocation.Left;
                                    break;
                                case "Right":
                                    ps.TitleBarLocation = Autodesk.AutoCAD.Windows.PaletteSetTitleBarLocation.Right;
                                    break;
                            }
                        break;
                    case "Docking":
                    {
                        res = e.GetKeywords("Choose a docking option:","None","Left","Right","Top","Bottom");
                        if (res.Status == Autodesk.AutoCAD.EditorInput.PromptStatus.OK)
                        {
                            switch (res.StringResult)
                            {
                                case "None":
                                    ps.Dock = Autodesk.AutoCAD.Windows.DockSides.None;
                                    break;
                                case "Left":
                                    ps.Dock = Autodesk.AutoCAD.Windows.DockSides.Left;
                                    break;
                                case "Right":
                                    ps.Dock = Autodesk.AutoCAD.Windows.DockSides.Right;
                                    break;
                                case "Top":
                                    ps.Dock = Autodesk.AutoCAD.Windows.DockSides.Top;
                                    break;
                                case "Bottom":
                                    ps.Dock = Autodesk.AutoCAD.Windows.DockSides.Bottom;
                                    break;
                            }
                        }
                        break;
                    }
                }
            }
        }

程序解读

这段C#代码定义了一个名为DoIt的静态公共方法,其功能是在AutoCAD环境中创建、显示并根据用户交互调整一个调色板集(PaletteSet)的属性。以下是详细解读:

  1. 首先检查变量ps是否为null,如果是,则初始化一个新的Autodesk.AutoCAD.Windows.PaletteSet对象,名称为"Test Palette Set",并关联一个Guid以保存和加载用户数据。

  2. 为调色板集注册两个事件处理器ps_Loadps_Save,分别用于在调色板集加载和保存时触发。

  3. 设置调色板集的样式,包括允许编辑名称、显示属性菜单、自动隐藏按钮和关闭按钮。

  4. 设置调色板集的最小尺寸为300x300像素,并向其中添加一个名为"Test Palette 1"的新控件(类型为TestControl)。

  5. 检查并确保调色板集可见(如果之前被隐藏,则将其设置为可见)。

  6. 获取当前活动文档的编辑器对象。

  7. 显示一个提示对话框,让用户选择调色板集的一个选项:"Opacity"、"TitleBarLocation"或"Docking"。

  8. 根据用户选择的选项执行以下操作:

    • 如果选择"Opacity",则循环获取用户输入的整数作为不透明度值(介于0到100之间),并将该值应用于调色板集的不透明度属性。
    • 如果选择"TitleBarLocation",再次提示用户从"Left"或"Right"中选择标题栏位置,并相应地设置调色板集的标题栏位置。
    • 如果选择"Docking",则提示用户选择停靠位置,并根据用户的选择将调色板集停靠在主窗口的左侧、右侧、顶部、底部或无停靠。

总之,这个方法是一个完整的调色板集管理单元,负责创建、展示以及根据用户的实时反馈来修改调色板集的各种视觉和布局特性。

相关推荐
zmd-zk1 分钟前
flink学习(2)——wordcount案例
大数据·开发语言·学习·flink
好奇的菜鸟5 分钟前
Go语言中的引用类型:指针与传递机制
开发语言·后端·golang
Alive~o.014 分钟前
Go语言进阶&依赖管理
开发语言·后端·golang
花海少爷16 分钟前
第十章 JavaScript的应用课后习题
开发语言·javascript·ecmascript
手握风云-17 分钟前
数据结构(Java版)第二期:包装类和泛型
java·开发语言·数据结构
喵叔哟37 分钟前
重构代码中引入外部方法和引入本地扩展的区别
java·开发语言·重构
尘浮生43 分钟前
Java项目实战II基于微信小程序的电影院买票选座系统(开发文档+数据库+源码)
java·开发语言·数据库·微信小程序·小程序·maven·intellij-idea
hopetomorrow1 小时前
学习路之PHP--使用GROUP BY 发生错误 SELECT list is not in GROUP BY clause .......... 解决
开发语言·学习·php
小牛itbull1 小时前
ReactPress vs VuePress vs WordPress
开发语言·javascript·reactpress
广煜永不挂科1 小时前
Devexpress.Dashboard的调用二义性
c#·express