问题描述
我正在尝试为Revit创建一个外部命令,该命令会弹出一个带有单个文本框的Windows窗体,供用户输入描述。用户单击“确定”后,该窗体关闭,但Revit卡在加载动作中。它不会冻结,它只是不断地加载某些东西。当我暂停调试时,代码仅将其设置为form.ShowDialog()行。如果我取出showdialog并仅在不使用表单的情况下运行它,那么它将运行正常。
我将在下面发布我的相关代码段。表单位于自己的.cs中,与外部命令.cs分开,但仍在同一命名空间下。
表单点击事件代码:
private void CancelForm(object sender,EventArgs e)
{
isReport = false;
this.DialogResult = DialogResult.Cancel;
Close();
}
private void SubmitForm(object sender,EventArgs e)
{
isReport = true;
reportDesc = descriptionBox.Text;
this.DialogResult = DialogResult.OK;
Close();
}
执行命令:
public Result Execute(ExternalCommandData commandData,ref string message,ElementSet elements)
{
//Get application and document objects
UIApplication uiapp = commandData.Application;
Document doc = uiapp.ActiveUIDocument.Document;
ReportForm ticket = new ReportForm();
ticket.ShowDialog();
代码在showdialog之后停止处理。从我能读到的内容来看,我认为这可能与关闭表单后关闭Revit或无法正确关闭表单但无法弄清楚如何解决它有关。
任何帮助将不胜感激!
解决方法
这是一个旧示例,该示例动态创建了一个最小的Windows窗体,将其显示为模式窗体,然后成功关闭:The Schedule API and Access to Schedule Data。也许会有所帮助。也许调试器以某种方式干扰了表单的关闭?
,我最终重新制作了整个插件,并确保我使用的是Jeremy Tammik的Revit插件向导来启动它,然后它开始工作。不完全确定是什么原因解决了问题,但猜测它在设置等方面存在错误。