初始化一个 Win。来自 Revit 按钮和执行命令的表单

Initializing a Win. Form from Revit Push Buttons and Executing commands

任何人都可以告诉我如何(如果可能的话)实现我已经编写的按下 Revit Addin 功能区中的按钮时显示的表单中的按钮的 class 吗? 附上 link 到我到目前为止所取得的成就的图像。

我在 Visual Studio 中使用 C# 语言实现 ExternalApplication class。

谢谢

            namespace PEASA_TOOLS_2021
            {
                public class PEASA_TOOLS_2021 : IExternalApplication
                {
                    static void AddRibbonPanel(UIControlledApplication application)
                        {
                          //Create panel
                          RibbonPanel ribbonPannel4 = application.CreateRibbonPanel(tabName, "Pruebas");
                          //Button for execute Form.
                          PushButtonData pbFormdata = new 
                          PushButtonData("cmdFormData","Extracción de Data", thisAssemblyPath, "PEASA_TOOLS_2021.DATA_EXTRACTION.DataExtractionButton");
                          PushButton pbForm = ribbonPannel4.AddItem(pbFormdata) as PushButton;
                          BitmapImage pruebasImage = new BitmapImage(new Uri("pack://application:,,,/PEASA_TOOLS_2021;component/RECURSOS/PRUEBAS.png"));
                          pbForm.LargeImage = pruebasImage;
                         }
                 }
             }

我去过那里,我知道你的挣扎。 这是我到目前为止所做的,它对我有用,它可能不是最好的解决方案,但它是我唯一的解决方案。

首先,您需要将这些变量添加到表单的部分 class

[Transaction(TransactionMode.Manual)] 
[Regeneration(RegenerationOption.Manual)]
public partial class Form1 : System.Windows.Forms.Form
{
    private UIApplication uiapp;
    private UIDocument uidoc;
    private Document doc;
    private ExternalCommandData commandData;
    private string message;
    private ElementSet elements;

然后,您必须将表单构造函数编辑为如下所示:

public Form1(ExternalCommandData commandData,ref string message, ElementSet elements)
    {
        InitializeComponent();
        this.commandData = commandData;
        this.elements = elements;
        uiapp = commandData.Application;
        uidoc = uiapp.ActiveUIDocument;
        doc = uidoc.Document;
    }

然后你会在Form partial下创建一个函数class,这个函数就是你写命令的函数:

它会是这样的:

public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
    {
     write your code here
     return Result.Succeeded;
     }

那么你只需调用Button1_Click函数下的执行函数

protected internal  void Button1_Click(object sender, EventArgs e)
    {
        Execute(commandData, ref message, elements);       
    }

现在 class 在按下按钮后调用表单:

Class DataExtractionButton : IExternalCommand
{
public Result Execute (ExternalCommandData commandData, ref string message, ElementSet elements)
{
        UIApplication uiapp = commandData.Application;
        UIDocument uidoc = uiapp.ActiveUIDocument;
        Application app = uiapp.Application;
        Document doc = uidoc.Document;
        ExternalCommandData revit = commandData;
var window = new Form1(commandData, ref message, elements);
window.ShowDialog();
return Result.Succeeded;
    }
}

应该这样做。

我希望这对你有帮助,它适用于我的情况。