web-dev-qa-db-ja.com

右クリックしてリストボックスのアイテムを選択します

右クリックしてコンテキストメニューを表示することで、いくつかのアクションを実行できる項目のリストを作成しようとしています。私はそれを完了しました、まったく問題ありません。

ただし、現在のアイテムを選択したままにするのではなく、アイテムを右クリックすると、マウスが置かれているアイテムを選択できるようにしたいと考えています。

私はこれと他の関連する質問を調査し、indexFromPoint(私の調査で見つけた)を使おうとしましたが、アイテムを右クリックすると、常に選択されたアイテムが常にクリアされ、コンテキストメニューが表示されません選択したアイテムがない場合は表示されないように設定しています。

これが私が現在使用しているコードです:

ListBox.SelectedIndex = ListBox.IndexFromPoint(Cursor.Position.X, Cursor.Position.Y);
22
Ipquarx

扱う ListBox.MouseDownでアイテムを選択します。このような:

private void listBox1_MouseDown(object sender, MouseEventArgs e)
{
    listBox1.SelectedIndex = listBox1.IndexFromPoint(e.X, e.Y);
}
35
demoncodemonkey

これは動作しています...

this.ListBox.MouseUp += new System.Windows.Forms.MouseEventHandler(this.List_RightClick);

private void List_RightClick(object sender, MouseEventArgs e)
{

    if (e.Button == MouseButtons.Right)
    {
        int index = this.listBox.IndexFromPoint(e.Location);
        if (index != ListBox.NoMatches)
        {
            listBox.Items[index];
        }
    }

}
9
Narottam Goyal

リストボックス全体にMouseRightButtonUpイベントを設定すると、同じ動作を得ることができます。

private void AccountItemsT33_OnMouseRightButtonUp(object sender, MouseButtonEventArgs e)
{
    // If have selected an item via left click, then do a right click, need to disable that initial selection
    AccountItemsT33.SelectedIndex = -1;
    VisualTreeHelper.FindElementsInHostCoordinates(e.GetPosition(null), (sender as ListBox)).OfType<ListBoxItem>().First().IsSelected = true;
}
0
Dave Mateer