我试图在单击按钮而不关闭窗体时在Revit中选择一个对象。 问题是当我单击按钮时我无法与Revit交互。
这是调用表单并将Revit作为所有者传递的主要代码。
IWin32Window revit_window = new JtWindowHandle(ComponentManager.ApplicationWindow);
Process process = Process.GetCurrentProcess();
IntPtr h = process.MainWindowHandle;
form.ShowDialog(revit_window);
public class JtWindowHandle : IWin32Window
{
IntPtr _hwnd;
public JtWindowHandle(IntPtr h)
{
Debug.Assert(IntPtr.Zero != h, "expected non-null window handle");
_hwnd = h;
}
public IntPtr Handle
{
get
{
return _hwnd;
}
}
}
这是选择元素的表单代码:
private void button1_Click(object sender, EventArgs e)
{
Hide();
SelectionFilter1 selfilter1 = new SelectionFilter1();
pickedRef1 = sel.PickObject(ObjectType.Element, selfilter1, "Select Family instance");
Show();
}
答案 0 :(得分:1)
您的Windows窗体可能未在有效的Revit API上下文中作为模式窗体运行。
因此,您尝试从外部访问Revit及其API。这基本上是不可能的。通过使用external event存在解决方法。
此问题目前还在Revit API discussion forum的Revit API with WPF线程中进行了讨论。
Revit SDK示例ModelessDialog / ModelessForm_ExternalEvent中提供了官方方法。
The Building Coder在Idling and External Events for Modeless Access and Driving Revit from Outside的主题组中列出了许多其他讨论和意见。