Rhino插件开发-几种提示输出

在Rhino中你可以使用三种形式实现提示的输出。第一种是命令行;第二种是消息窗口;第三种是窗口提示。

      一、命令行

      前面个文章我们介绍了命令行的提示方法。直接在需要提示的步骤添RhinoApp.WriteLine("提示");代码,实现

  命令行提示

      二、消息窗口

      Rhino可以创建一个消息提示框来输出提示,和上面的方法相同,在需要输出提示的地方插入代码MessageBox.Show(this, "你好 Rhino!", "一个子窗口", MessageBoxButtons.OKCancel);。下面是代码的窗口形式。

 命令行提示

      三、窗口提示

      消息窗口和窗口提示实际上是差不多的东西,只是消息窗口是通过MessageBox.Show()直接弹出一个消息对话框(可以理解为是一个超级简单的Form窗口,你只要定义提示内容,其他的窗口属性都是默认的即可),而窗口提示是通过自定义一个窗口和设置提示框大小、背景、行为等等属性个性化的设置后实现的提示,如果只是进行简单的实现窗口提示,使用MessageBox.Show()就足够了。下面是一个窗口的设置代码:

using Eto.Drawing;
using Eto.Forms;
using Rhino.UI;
using System;
using System.ComponentModel;

namespace CowForRhinoEto.Views
{
    /// <summary>
    /// 创建一个自定义对话框类。
    /// </summary>
    class CowForRhinoEtoModalDialog : Dialog<DialogResult>
    {
        /// <summary>
        /// 创建一个自定义对话框方法,该窗口由命令启动。
        /// </summary>
        public CowForRhinoEtoModalDialog()

        {
            // Padding:获取或设置面板内容周围的填充。
            Padding = new Padding(5);
            // Resizable:获取或设置一个值,该值指示此窗口是否可调整大小。
            Resizable = false;
            // Result:获取或设置对话框的结果。
            Result = DialogResult.Cancel;
            // Title:获取或设置窗口的标题。
            Title = "一个窗口";
            // WindowStyle:获取或设置此窗口的样式。
            WindowStyle = WindowStyle.Default;
            // 设置一个自定义按钮。
            var hello_button = new Button { Text = "Hello002" };
            hello_button.Click += (sender, e) => OnHelloButton();
            // DefaultButton:获取或设置默认按钮。
            DefaultButton = new Button { Text = "确定" };
            DefaultButton.Click += (sender, e) => Close(DialogResult.Ok);   // 关闭具有指定结果的对话框。
            // AbortButton:获取或设置中止按钮。
            AbortButton = new Button { Text = "取消" };
            AbortButton.Click += (sender, e) => Close(DialogResult.Cancel);  // 关闭具有指定结果的对话框。
            // 初始化TableLayout类的新实例,创建一行位置放置内容。
            var button_layout = new TableLayout
            {
                // 设置按钮的边距:左、上、右、下。
                Padding = new Padding(5, 10, 5, 5),
                // 获取或设置表中每个单元格之间的水平和垂直间距。
                Spacing = new Size(5, 5),
                // 设置表中的行集合。
                Rows = { new TableRow(null, hello_button, null) }
            };
            // 初始化TableLayout类的新实例,创建一行位置放置内容。
            var defaults_layout = new TableLayout
            {
                // 设置按钮的边距:左、上、右、下。
                Padding = new Padding(5, 10, 5, 5),
                // 获取或设置表中每个单元格之间的水平和垂直间距。
                Spacing = new Size(5, 5),
                // 设置表中的行集合。
                Rows = { new TableRow(null, DefaultButton, AbortButton, null) }
            };
            // Content:获取或设置面板的主要内容。这里将所有内容实现到面板。
            Content = new TableLayout
            {
                // Padding:为所有边初始化具有指定填充的Padding类的新实例
                Padding = new Padding(5),
                // Spacing:获取或设置表中每个单元格之间的水平和垂直间距。
                Spacing = new Size(5, 5),
                // 设置表中的行集合。
                Rows = { new TableRow(button_layout), new TableRow(defaults_layout) }
            };
        }
        // 引发LoadComplete事件,并递归到此容器的子级。
        protected override void OnLoadComplete(EventArgs e)
        {
            base.OnLoadComplete(e);
            this.RestorePosition();
        }
        // 引发结束事件。
        protected override void OnClosing(CancelEventArgs e)
        {
            this.SavePosition();
            base.OnClosing(e);
        }
        // "Hello002"的Rhino通用消息。
        protected void OnHelloButton()
        {
            MessageBox.Show(this, "你好 Rhino!", "一个子窗口", MessageBoxButtons.OKCancel);

        }
    }
}

       我们创建一个命令“CowForRhinoEtoModalDialog”来启动该提示:

using Rhino;
using Rhino.Commands;
using Rhino.UI;

namespace CowForRhinoEto.Commands
{
    public class CowForRhinoEtoModalDialogCommand : Command
    {
        // 定义一个命令“CowForRhinoEtoModalDialog”,该命令启动一个Rhino消息窗口。

        // 定义命令的名称为“CowForRhinoEtoModalDialog”
        public override string EnglishName
        {
            get { return "CowForRhinoEtoModalDialog"; }
        }

        protected override Result RunCommand(RhinoDoc doc, RunMode mode)
        {
            var rc = Result.Cancel;
            if (mode == RunMode.Interactive) // 当命令被输入执行时
            {
                // 初始化Rhino消息窗口。
                var dialog = new Views.CowForRhinoEtoModalDialog();
                // 设置以模式显示对话框,阻止当前线程,直到它关闭。
                var dialog_rc = dialog.ShowModal(RhinoEtoApp.MainWindow);
                // 设置当用户点击“确定”时,关闭消息窗口。
                if (dialog_rc == Eto.Forms.DialogResult.Ok)
                    rc = Result.Success;
            }
            else // 当命令没有被执行时的消息提示。
            {
                var msg = string.Format("Scriptable version of {0} command not implemented.", EnglishName);
                RhinoApp.WriteLine(msg);
            }
            return rc;
        }
    }
}

      在rhino中输入命令“CowForRhinoEtoModalDialog”,会出现下面窗口

 窗口提示

      设置炫酷的提示窗口就需要掌握更多Form窗口知识,许多Form窗口的应用可以参考这里

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

quejingchang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值