1

私は ListView を使用しており、ユーザーがそこから 1 つ以上の行を選択できるようにしたいと考えています。私は現在行選択を使用していますが、ユーザーが必要な項目にチェックを入れることができるチェックボックスを使用すると、より直感的な UI になると思います。

これは単純な変更でしたが、ListView のチェックボックス機能が応答していないようです。チェックボックスをゆっくりとクリックすると、期待どおりにチェックを入れたり外したりしますが、すばやく連続してクリックすると、通常のクリックは無視されます。ユーザーはリストのチェック/チェック解除をすばやく実行したいと思うので、これによりチェックボックスのアプローチが機能しなくなります。複数列の行を表示する必要があるため、ListView (またはその派生物) を使用する必要があります。

ListView チェックボックスの動作を CheckedListBox と比較して、それがより大きな問題であるかどうかを確認しましたが、CheckedListBox は問題なく、クリックを見逃すことはありません。2 つを比較するために、以下にサンプル アプリを含めました。CheckedListBox のチェックボックスを 3 回すばやくクリックすると、完全に機能します。ListView で 3 回すばやくクリックすると、常に 1 回のクリックが見逃されます。

この問題は ListView の基本的な問題のように思われるため、アイデアや回避策はありますか?

using System;
using System.Windows.Forms;

public class CheckBoxTest : Form
{
    public CheckBoxTest()
    {
        //set up the list view
        ListView lv = new ListView();
        lv.FullRowSelect = true;
        lv.CheckBoxes = true;
        lv.View = View.Details;

        lv.Columns.Add("Col1");
        lv.Columns.Add("Col2");
        lv.Columns.Add("Col3");

        lv.Items.Add(new ListViewItem(new string[] { "a", "b", "c" }));
        lv.Items.Add(new ListViewItem(new string[] { "a", "b", "c" }));
        lv.Items.Add(new ListViewItem(new string[] { "a", "b", "c" }));
        lv.Items.Add(new ListViewItem(new string[] { "a", "b", "c" }));
        lv.Items.Add(new ListViewItem(new string[] { "a", "b", "c" }));
        lv.Items.Add(new ListViewItem(new string[] { "a", "b", "c" }));

        lv.Bounds = new System.Drawing.Rectangle(0, 0, 200, 200);
        this.Controls.Add(lv);

        //set up the list box
        CheckedListBox lb = new CheckedListBox();
        lb.CheckOnClick = true;

        lb.Items.Add("1");
        lb.Items.Add("2");
        lb.Items.Add("3");
        lb.Items.Add("4");
        lb.Items.Add("5");
        lb.Items.Add("6");

        lb.Bounds = new System.Drawing.Rectangle(210, 0, 200, 200);
        this.Controls.Add(lb);

        this.ClientSize = new System.Drawing.Size(410, 200);
        this.Text = "CheckBox Test";
    }

    [STAThread]
    static void Main(String[] args)
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);

        CheckBoxTest s = new CheckBoxTest();
        s.Show();

        Application.Run();

    }
}
4

0 に答える 0