1

「詳細」モードでファイルのリストを表示している ListView コントロールがあります。ユーザーがこれらのファイルを 1 つまたは複数同時に選択できるようにします。

選択したファイルに対して実行したいアクションがありますが、どのファイルが選択されているかがわかって初めてこのアクションを開始するのが理にかなっているように思えます。

明確にするために:

ユーザーが 1 つのファイルを選択すると、onSelectionFinished が起動され、doThisAction(selectedFile[0]) が続行されます。

ユーザーが複数のファイルを選択 - onSelectionFinished が発生し、doThisAction(selectedFile[0]) に続いて doThisAction(selectedFile[1]) など...

SelectedIndexChanged を使用してみましたが、ユーザーがたとえば 3 つのファイルを選択すると、アクション ルーチンが 6 回起動されます: インデックス 0、インデックス 0、1、インデックス 0、1、2 - 非常に非効率的なプログラムです!

4

3 に答える 3

4

ユーザーが複数のファイルを選択できるようにすると、ユーザーがいつdone選択しているのかわからなくなり、選択を変更するたびに操作を実行することはありません。

選択イベントに反応しようとする代わりに、リスト ビューで選択された項目に対して操作を実行するボタン (またはその他のコントロール) が必要です。ユーザーだけが自分がいついるかを知っておりdone、それを教えてくれます。

于 2013-07-08T22:07:21.313 に答える
1

SelectedIndexChangedイベントを抑制することができます。ユーザーが特定の期間に選択を変更していない場合は、変更が完了したと見なしてメソッドを呼び出します。例については、こちらを参照してください。

ただし、@Paul Sasik で説明されているように、ボタンのクリックによってユーザーがいつ終了するかをユーザーに決定させる方がよい場合があります。

于 2013-07-08T22:09:59.613 に答える
0

代わりに選択イベントを設定しないで、ユーザーに必要なアイテムを選択させ、リストビューのマウスクリックイベントを配置し、マウスの右ボタンかどうかを確認し、内部で作業を行います

        private void listView1_MouseClick(object sender, MouseEventArgs e)
        {
            if (e.Button == MouseButtons.Right)
            {
                //do work here
            }
        }

リストビューにコンテキストメニューを追加して、ユーザーが右クリックしたときに柔軟性を高めることができます(その選択に対して何をするかについてのオプションが増えます):

        MenuItem menuItem1 = new MenuItem("&Copy");
        MenuItem menuItem2 = new MenuItem("&Delete");
        contextMenu1.MenuItems.AddRange(new MenuItem[] { menuItem1, menuItem2 });
        listView1.ContextMenu = contextMenu1;
于 2013-07-08T22:31:59.313 に答える