Revit API WinForms - передача значения ComboBox обратно в Command - PullRequest
0 голосов
/ 07 марта 2020

Я пытаюсь передать значение (идентификатор элемента) из WinForm обратно в файл Command.cs, но получаю сообщение об ошибке:

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

Я следую инструкциям на YouTube здесь и кажется довольно простым и понятным, но переход к Command.cs - еще один уровень сложности.

У меня есть код Command.cs, заключенный в блок try / catch, который просто говорит мне, что есть nullReferenceException однако это не говорит мне, на какой линии это происходит. Я осмотрел , но не нашел никаких советов, как заставить отладку показывать строку ошибки. Если у кого-то есть другие указатели, это было бы полезно.

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);


Ответы [ 2 ]

1 голос
/ 07 марта 2020

Запустите всю надстройку внутри отладчика Visual Studio и построчно просматривайте код. Это точно покажет вам, где выдается исключение, и позволит вам легко определить причину проблемы.

0 голосов
/ 12 марта 2020

Изменил мой код на это, и он начал работать:

form1.cs

 public string MyVal;
        //{

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

эта ссылка была полезной вместе с учебными пособиями на YouTube о том, как передавать значения из формы в форму.

...