[トピック内 6 記事 (1 - 6 表示)] << 0 >>
チェックリストボックスにフォーカスが移動しないように 以下のようにしたのですが思った通りに動作しませんでした。 創造ではチェックリストボックスではなくその中のチェックボックスに対して 処理しないとだめなのだと思いますが どうすればよいのでしょうか? CheckedListBox clbInpu; clbInput.GetType().InvokeMember("SetStyle", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.InvokeMethod, null, clbInput, new object[] { ControlStyles.Selectable, false });
■No93698 (犬夜叉 さん) に返信 ControlStyles.Selectable を False にすると、Tab キーを押したときに移動先にならなくなるだけです。 TabStop プロパティとの違いは、SelectNextControl メソッドを呼び出したとき、tabStopOnly = false にしたときにも移動先にならないこと。 フォーカスを取得したら、別のコントロールに位置付けるようにすれば良いと思います。 ただし、チェックボックスの ON/OFF ができなくなるので、MouseDown イベントで var index = clbInput.IndexFromPoint(e.Location); if (index != -1) { clbInput.SetItemChecked(index, !clbInput.GetItemChecked(index)); } のようにします。
■No93705 (犬夜叉 さん) に返信 >>フォーカスを取得したら、別のコントロールに位置付けるようにすれば良いと思います。 > すみません、具体的にどうすればよろしいのでしょうか? こんな感じでどうでしょう? public Form1() { InitializeComponent(); clbInput.Enter += (sender, e) => { prevControl?.Focus(); }; clbInput.MouseDown += (sender, e) => { var index = clbInput.IndexFromPoint(e.Location); if (index != -1) { clbInput.SetItemChecked(index, !clbInput.GetItemChecked(index)); } var txt = prevControl as TextBox; if (txt != null) { var lst = new List<string>(); foreach (var selectedItem in clbInput.CheckedItems) { lst.Add(selectedItem.ToString()); } prevControl.Text = string.Join(",", lst.ToArray()); } }; foreach (var con in GetControls(this)) { con.Enter += (sender, e) => { prevControl = (Control)sender; }; } } private Control prevControl; private static List<Control> GetControls(Control con) { var lst = new List<Control>(); lst.Add(con); if (con.HasChildren) { foreach (Control child in con.Controls) { lst.AddRange(GetControls(child)); } } return lst; }
管理者用
- Child Tree -