Revit API WinForms - Passing ComboBox value back to Command

本秂侑毒 提交于 2020-04-30 09:21:52

问题


I'm trying to pass a value(an element id) from a WinForm back to the Command.cs file but I'm getting an error:

 System.NullReferenceException: Object reference not set to an instance of an object.
   at BatchSheetMaker.Command.Execute(ExternalCommandData commandData, String& message, ElementSet elements)

I'm following the youtube tutorial here and it seems fairly easy and straight forward but passing back to the Command.cs is another layer of complexity.

I have the Command.cs code wrapped in a try/catch block which just tells me that there's nullReferenceException however it doesn't tell me which line it's occurring at. I've looked around but havn't found any tips on how to make the debug show the error line. If anyone has any other pointers, that'd be helpful.

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 button1Continue_Click(object sender, EventArgs e)
        {
            MyVal = comboBox1TitleBlockList.Text;
        }

Command.cs

    Form1 form1 = new Form1(commandData);
    String elementString = form1.MyVal.ToString();
    Element eFromString = doc.GetElement(elementString);
    ElementId titleBlockId = eFromString.Id;

    ViewSheet sheet = ViewSheet.Create(doc, titleBlockId);



回答1:


Run your entire add-in inside the Visual Studio debugger and step through your code line by line. That will show you exactly where the exception is thrown and enable you to easily identify what is causing the problem.




回答2:


Changed my code to this and it started working:

form1.cs

 public string MyVal;
        //{

            //get { return myVal; }
            //set { myVal = value; }
        //}

this link was helpful along with tutorials on youtube on how to pass values from form to form.



来源:https://stackoverflow.com/questions/60573224/revit-api-winforms-passing-combobox-value-back-to-command

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!