Autodesk Community Tips- ADNオープン
Autodesk Community Tipsではちょっとしたコツ、やり方、ショートカット、アドバイスやヒントを共有しています。
ソート順:
質問 AutoCAD .net API でパレットを作成しました。パレットには、テキストボックスを配置したカスタムコントロールを配置しています。パレットを表示しテキストボックスに値を入力している途中で、マウスカーソルをパレットから外すと、フォーカスがテキストボックスから外れ、以後のキー入力はAutoCADのコマンド入力として処理されてしまいます。 パレットからマウスカーソルを外してもフォーカスが外れないようにすることはできますか。   回答 PaletteSetを継承したクラスを作成し、KeepFocusメソッドをオーバライドして、フォーカスを外したくない場合には戻り値falseを戻すように実装することで実現が可能です。   以下は、テキストボックス(textBox1)を配置したユーザコントロール(UserControl1)をパレットに配置し、textBox1にフォーカスがある場合は、コントロールからフォーカスを外さない処理をKeepFocusメソッドに記述したサンプルコードとなります。   public class MyPalettSet : PaletteSet { private UserControl1 uctl1 = new UserControl1(); public MyPalettSet(string name) : base(name) { this.Style = PaletteSetStyles.ShowTabForSingle | PaletteSetStyles.ShowPropertiesMenu | PaletteSetStyles.ShowAutoHideButton | PaletteSetStyles.ShowCloseButton; this.MinimumSize = new System.Drawing.Size(400, 100); this.Add("uctl", uctl1); this.Visible = true; this.Size = new System.Drawing.Size(400, 100); this.DockEnabled = DockSides.None; } public override bool KeepFocus { get { return uctl1.Controls["textBox1"] != null ? uctl1.Controls["textBox1"].Focused : false; } } }
記事全体を表示
Question AutoCADのAPIでレイヤーをロックした場合、レイヤー上のエンティティの表示がローライト表示されません。 GUIでレイヤーをロックする場合と同様にレイヤー上のエンティティをローライト表示する方法はありますか。 Answer レイヤーのロックを設定する際に、レイヤーのプロパティを編集し、レイヤに変更がされたことをAutoCADエディタに認識させた後に、Regenを実行することでGUIからロック状態を変更した場合と同様に、ロックしたレイヤー上のエンティティをローライト表示させることが可能です。   以下は、上述の処理をLockという名前のレイヤーに対して実行するサンプルコードです。   C#  [CommandMethod("Layerlack")] static public void Layerlack() { Document doc = Application.DocumentManager.MdiActiveDocument; Database db = doc.Database; Editor ed = doc.Editor; using (Transaction tr = db.TransactionManager.StartTransaction()) { LayerTable table = tr.GetObject(db.LayerTableId, OpenMode.ForRead) as LayerTable; if (table.Has("Lock")) { LayerTableRecord record = tr.GetObject(table["Lock"],OpenMode.ForWrite) as LayerTableRecord; record.IsLocked = true; record.LineWeight = record.LineWeight; } tr.Commit(); } ed.Regen(); }    VBA Sub Example_Lock() Dim layerObj As AcadLayer Set layerObj = ThisDrawing.Layers.Add("Lock") layerObj.Lock = True layerObj.Lineweight = layerObj.Lineweight ThisDrawing.Regen acAllViewports End Sub    
記事全体を表示