2007/08/27(Mon) 15:40:08 編集(投稿者)
■No6925 (皆口 さん) に返信
> 下記で試したところ、常にそのボタンの次の場所のみにフォーカスが当たるようになってました。
はつねさんは、
> > 現在フォーカスがあるコントロールの次のコントロール
と書かれています。
通常、ボタンを押したときにはそのボタンがアクティブなコントロールになりますので、
どうしてもボタンでやるなら、Windows の[スクリーン キーボード]のような
特殊な対応が必要になるかと思います。
方法は幾つかあるでしょうけれども、たとえば、
(案1) 直前にアクティブであったコントロールに対して SelectNextControl する。
(案2) ボタンがフォーカスを受け取らないようにしておく。
とか。
//-------------------
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
Foo[] bar = { new Foo(), new Foo() };
private void Form1_Load(object sender, EventArgs e)
{
bar[0].Text = "Tab";
bar[0].Size = new Size(80, 30);
bar[0].Location = new Point(8, 8);
bar[0].Click += delegate { SelectNextControl(ActiveControl, true, true, true, true); };
bar[1].Text = "Shift+Tab";
bar[1].Size = new Size(80, 30);
bar[1].Location = new Point(88, 8);
bar[1].Click += delegate { SelectNextControl(ActiveControl, false, true, true, true); };
Controls.AddRange(bar);
}
}
class Foo : Button
{
public Foo() { base.SetStyle(ControlStyles.Selectable, false); }
}