/// <summary> /// Questo metodo crea e mostra una finestra di dialogo non modale, a meno che non esista già. /// </summary> /// <remarks> /// Il comando esterno lo richiama su richiesta dell'utente finale /// </remarks> /// public void ShowForm(UIApplication uiapp) { // If we do not have a dialog yet, create and show it if (m_MyForm == null || m_MyForm.IsDisposed) { // Un nuovo gestore per gestire l'invio delle richieste tramite la finestra di dialogo _handler = new RequestHandler(); // Evento esterno per la finestra di dialogo da utilizzare (per inviare richieste) _exEvent = ExternalEvent.Create(_handler); // Diamo gli oggetti alla nuova finestra di dialogo. // La finestra di dialogo diventa il proprietario responsabile della loro disposizione, alla fine. m_MyForm = new ModelessForm(_exEvent, _handler); m_MyForm.Show(); m_MyForm.BringToFront(); } }
/// <summary> /// Implementa l'evento OnStartup /// </summary> /// <param name="application"></param> /// <returns></returns> public Result OnStartup(UIControlledApplication application) { m_MyForm = null; // nessun dialogo ancora necessario; il comando lo porterà thisApp = this; // accesso statico a questa istanza dell'applicazione // Metodo per aggiungere un Tab e un RibbonPanel RibbonPanel ribbonPanel = RibbonPanel(application); string thisAssemblyPath = Assembly.GetExecutingAssembly().Location; // Creazione del Button da inserire nel Tab if (ribbonPanel.AddItem( new PushButtonData("DataQuery", "DataQuery", thisAssemblyPath, "ModelessForm_ExternalEvent.Command")) is PushButton button) { // ToolTip mostrato button.ToolTip = "Visualizzatore dei parametri degli oggetti selezionati"; // Icona del Button button.Image = GetEmbeddedImage("ModelessForm_ExternalEvent.Resources.BOLDsft_16.png"); button.LargeImage = GetEmbeddedImage("ModelessForm_ExternalEvent.Resources.BOLDsft_32.png"); } ; return(Result.Succeeded); }
/// <summary> /// Il metodo principale del gestore di eventi. /// </summary> /// <remarks> /// Viene chiamato da Revit dopo che è stato generato l'evento esterno corrispondente /// (dal modulo non modale) e Revit ha raggiunto il momento in cui potrebbe /// chiamare il gestore dell'evento (cioè questo oggetto) /// </remarks> /// public void Execute(UIApplication uiapp) { // Il valore attivo nella pagina int countInt = 0; // Variabile booleana che attesta se va riattivata o meno la Form principale bool _modForm = true; try { switch (Request.Take()) { case RequestId.None: { return; // no request at this time -> we can leave immediately } case RequestId.Id: { // Definisce il nome dei Codici Tipologia, Cellula, Posizionale modelessForm = App.thisApp.RetriveForm(); _typologieCode = modelessForm.TypologieCode; _cellCode = modelessForm.CellCode; _positionalCode = modelessForm.PositionalCode; // Chiama il metodo che seleziona un oggetto pickedObject = PickObject(uiapp); // Chiama il metodo che restituisce il valore del Codice Tipologia _valueTypologieCode = PickTypologieCode(uiapp, pickedObject); // Cambia il count countInt = 1; // Se il valore del Codice Tipologia è presente, lo aggiunge alla Form if (_valueTypologieCode != "Nessun valore" && _valueTypologieCode != null) { // Cancello tutti i valori presenti nell'ArrayList _dimensionsList.Clear(); // Imposta il valore della Distinta per la Form modelessForm.ValueDistintaFromCaptureButton(); // Imposta il valore del Codice Tipologia per la Form PickCellCode(uiapp, pickedObject); //PickPanelTypeIdentifier(uiapp, pickedObject); modelessForm.ValueTypologyCodex(); // Imposta il valore del Codice Cellula (Panel Type Identifier) per la Form modelessForm.ValuePanelTypeIdentifierFromCaptureButton(); // Imposta il valore del Codice Posizionale (UnitIdentifier) per la Form PickPositionalCode(uiapp, pickedObject); //PickUnitIdentifier(uiapp, pickedObject); modelessForm.ValueUnitIdentifierFromCaptureButton(); // Metodo che conta il numero di pannelli presenti GetNumberOfPanels(uiapp); modelessForm.NrCodes(); // Chiama il metodo che seleziona il parametro stringa della famiglia scelta e riempie il PictureBox GetTypeParameterOfFamily(uiapp, pickedObject); modelessForm.SetModifyPicture(); // Chiama il metodo che seleziona le Dimensioni dell'oggetto selezionato e riempie la ListBox _dimensionsList = GetParameters(uiapp, pickedObject); modelessForm.ShowListBox1(); // Chiama il metodo che seleziona la Distinta corretta nella ComboBox e riempie la DataGrid modelessForm.SetComboBox(_valueTypologieCode); // Imposta la ModelessFrom come attiva _modForm = true; } else { MessageBox.Show("Questo elemento non ha un Codice Gruppo. Aggiungilo."); modelessForm.CleanAll(); } break; } case RequestId.ComboBox: { countInt = 2; break; } case RequestId.Code: { // Cattura tutti i parametri di un Curtain Panel _allParameters = GetAllParameters(uiapp); // Riempie le ComboBoxes del CodexDefinition _codeDefinition = CodeDefinition.thisCodeDef; _codeDefinition.FillTheComboBoxes(_allParameters); _modForm = false; break; } case RequestId.ChangeCode: { // Imposta il cambiamento dei codici modelessForm = App.thisApp.RetriveForm(); modelessForm.CodesChanges(); // Chiude la Form CodeDefinition modelessForm.CloseCodeDefinition(); break; } case RequestId.ProjectName: { // Ottiene il nome del Progetto _projectName = GetTheNameOfTheProject(uiapp); // Imposta il nome del Progetto nel TextBox modelessForm = App.thisApp.RetriveForm(); modelessForm.SetNameProject(); // Verifico se la Form SetProjectName sia attiva o meno _setProjectName = SetProjectName.thisApp; if (_setProjectName != null) { _setProjectName.FillProjectName(_projectName); _modForm = false; } break; } case RequestId.SetProjectName: { // Ottiene il nome del Progetto _setProjectName = SetProjectName.thisApp; _projectName = _setProjectName.NewProjectName; // Imposta il nuovo nome del Progetto nel Progetto SetTheNameOfTheProject(uiapp, _projectName); // Imposta il nuovo nome del Progetto nel DataQuery modelessForm = App.thisApp.RetriveForm(); modelessForm.SetNameProject(); // Chiama il metodo che chiude la Form SeTProjectName e riattiva la Form ModelessForm modelessForm.CloseSetProjectName(); _setProjectName.SetProjectNameNull(); _modForm = true; break; } default: { // Una sorta di avviso qui dovrebbe informarci di una richiesta imprevista break; } } } finally { if (_modForm) { App.thisApp.WakeFormUp(); App.thisApp.ShowFormTop(); } } return; }