C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

ログ内検索
  • キーワードを複数指定する場合は 半角スペース で区切ってください。
  • 検索条件は、(AND)=[A かつ B] (OR)=[A または B] となっています。
  • [返信]をクリックすると返信ページへ移動します。
キーワード/ 検索条件 /
検索範囲/ 強調表示/ ON (自動リンクOFF)
結果表示件数/ 記事No検索/ ON
大文字と小文字を区別する

No.93698 の関連記事表示

<< 0 >>
■93698  チェックリストボックスのフォーカスについて
□投稿者/ 犬夜叉 -(2020/01/15(Wed) 08:41:48)

    分類:[.NET 全般] 

    2020/01/15(Wed) 08:42:27 編集(投稿者)

    チェックリストボックスにフォーカスが移動しないように
    以下のようにしたのですが思った通りに動作しませんでした。
    創造ではチェックリストボックスではなくその中のチェックボックスに対して
    処理しないとだめなのだと思いますが
    どうすればよいのでしょうか?

    CheckedListBox clbInpu;

    clbInput.GetType().InvokeMember("SetStyle", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.InvokeMethod, null,
    clbInput, new object[] { ControlStyles.Selectable, false });
親記事 /過去ログ162より / 関連記事表示
削除チェック/

■93699  Re[1]: チェックリストボックスのフォーカスについて
□投稿者/ 犬夜叉 -(2020/01/15(Wed) 10:16:03)
    ちなみに現状では
    パネルの上にチェックボックスを配置して
    すべてのチェックボックスに以下の処理を行って
    代替しています。

    ckb.GetType().InvokeMember("SetStyle", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.InvokeMethod, null,
    ckb, new object[] { ControlStyles.Selectable, false });
記事No.93698 のレス /過去ログ162より / 関連記事表示
削除チェック/

■93700  Re[1]: チェックリストボックスのフォーカスについて
□投稿者/ KOZ -(2020/01/15(Wed) 13:04:16)
    2020/01/15(Wed) 13:04:39 編集(投稿者)

    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));
    }

    のようにします。
記事No.93698 のレス /過去ログ162より / 関連記事表示
削除チェック/

■93705  Re[2]: チェックリストボックスのフォーカスについて
□投稿者/ 犬夜叉 -(2020/01/17(Fri) 11:20:38)
    No93700 (KOZ さん) に返信

    > フォーカスを取得したら、別のコントロールに位置付けるようにすれば良いと思います。
    すみません、具体的にどうすればよろしいのでしょうか?


    やりたいことは

    チェックリストボックスに "A", "B", "C" のチェックボックスがあった場合、
    選択されているテキストボックスに
    "A"がチェックされたら "A"
    "A"と"B"がチェックされたら"A,B"
    が入力されるようにしたいのです。


記事No.93698 のレス /過去ログ162より / 関連記事表示
削除チェック/

■93706  Re[3]: チェックリストボックスのフォーカスについて
□投稿者/ KOZ -(2020/01/17(Fri) 12:26:45)
    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;
    }
    
    
記事No.93698 のレス /過去ログ162より / 関連記事表示
削除チェック/

■93707  Re[4]: チェックリストボックスのフォーカスについて
□投稿者/ 犬夜叉 -(2020/01/17(Fri) 16:32:31)
    No93706 (KOZ さん) に返信

    ありがとうございました。
    プログラムを見てやっと処理を理解することができました。
    お手数をおかけしてどうもすみませんでした。

    こんな感じでイベントの処理が作成できるとは知りませんでした。
    > clbInput.Enter += (sender, e) => {
    >  prevControl?.Focus();
    > };

    また、GetControls は再帰を使ってすべてのコントロールに
    イベント追加してるんですね。

    私はプロパティを使って一つ一つコントロールを選択して
    イベントコードを作成する方法しか知りませんでした。

    いろいろ勉強できてとてもよかったです。
記事No.93698 のレス / END /過去ログ162より / 関連記事表示
削除チェック/



<< 0 >>

パスワード/

- Child Tree -