2016-10-03 1 views
0

J'essaye désespérément d'empêcher que revit ne reçoive une commande de suppression alors que dans une forme non modale (celle qui était affichée avec Show() et non Showdialog()), mais je ne peux pas sembler être capable de l'arrêter. Mon problème est que mon formulaire contient des zones de texte: sa fonction de base nécessite que l'utilisateur puisse naviguer (faire un panoramique et un zoom) dans Revit sans devoir fermer et rouvrir le formulaire. Mais dès que l'utilisateur appuie sur delete sur n'importe quel texte de la zone de texte, revit pense que l'utilisateur a entré une commande de suppression dans la fenêtre principale, ce qui peut entraîner des suppressions accidentelles. Notez les api interroge un revitdb basé sur des entités sélectionnées (familles) et est alors en mesure de renommer le type de famille ou le nom de famille, en utilisant une zone de texte et un bouton 'apply'. Mais dès qu'ils frappent le bouton de suppression sur le clavier, devinez quoi - l'entité est supprimée dans revit.Empêcher Revit de recevoir une commande de suppression sous forme non modérée

J'ai passé 10 heures à ce sujet et cela pourrait s'avérer catastrophique pour mes plans.

Répondre

0

Répondez à ma propre question: La solution consiste à simplement «épingler» les éléments sélectionnés lorsque l'utilisateur clique sur la zone de texte.

 private void textBox3_MouseClick(object sender, MouseEventArgs e) 
    { 
     //find selected items 

     Selection sel = uidoc.Selection; 
     ICollection<ElementId> ids = sel.GetElementIds(); 

     foreach (ElementId id in ids) 
     { 
      Element el = doc.GetElement(id); 
      el.Pinned = true; 
     } 

    } 

Ensuite, lorsque l'utilisateur ne plus distinguer le terrain laisse (peu satisfaisant etw.