Я пытаюсь передать значение обратно из WinForms, которые я пытаюсь настроить, однако, как только форма закрывается, Revit застревает в синей прядильной машине после нажатия кнопки продолжения и не возвращается к работе. оригинальная программа.
Я проверил, но не нашел ничего, что могло бы вернуть его в программу. Большинство (если не все) учебных пособий по WinForms не имеют отношения к работе с Revit. Большинство из того, что я нашел / наблюдал, имеет дело с передачей значения из одной формы в другую, хотя я нашел это , хотя это немного отличается.
вот мой код:
Form1.cs
public partial class Form1 : System.Windows.Forms.Form
{
private UIApplication uiapp;
private UIDocument uidoc;
private Autodesk.Revit.ApplicationServices.Application app;
private Document doc;
private string myVal;
public string MyVal
{
get { return myVal; }
set { myVal = value; }
}
public Form1(ExternalCommandData commandData)
{
InitializeComponent();
uiapp = commandData.Application;
uidoc = uiapp.ActiveUIDocument;
app = uiapp.Application;
doc = uidoc.Document;
}
public delegate void delPassData(System.Windows.Forms.ComboBox text);
private void Form1_Load(object sender, EventArgs e)
{
//Create a filter to get all the title block types.
FilteredElementCollector colTitleBlocks = new FilteredElementCollector(doc);
colTitleBlocks.OfCategory(BuiltInCategory.OST_TitleBlocks);
colTitleBlocks.WhereElementIsElementType();
foreach(Element x in colTitleBlocks)
{
comboBox1TitleBlockList.Items.Add(x.Name);
}
}
private void label1_Click(object sender, EventArgs e)
{
}
private void button1Continue_Click(object sender, EventArgs e)
{
MyVal = comboBox1TitleBlockList.Text; // is returning with Titleblock.Name
button1Continue.DialogResult = DialogResult.OK;
Debug.WriteLine("OK button was clicked.");
Close();
//Dispose();
return;
}
private void button2Cancel_Click(object sender, EventArgs e)
{
button2Cancel.DialogResult = DialogResult.Cancel;
Debug.WriteLine("Cancel button was clicked");
//Dispose();
Close();
return;
}
private void comboBox1TitleBlockList_SelectedIndexChanged(object sender, EventArgs e)
{
}
}
Command.cs
Form1 form1 = new Form1(commandData);
System.Windows.Forms.Application.Run(new Form1(commandData)); // not sure if this line is required.
form1.ShowDialog();
String elementString = form1.MyVal; //<---- this is returning null. need to figure out how to pass value from form1 back to Command.cs
if (elementString != null)
{
elementString = form1.MyVal.ToString();
Element eFromString = doc.GetElement(elementString);
titleBlockId = eFromString.Id;
}
else
{
titleBlockId = collector.FirstElementId();
}
Любая помощь и направление приветствуются.