質問
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;
}
}
}
記事全体を表示