2012-02-10 8 views
3

私はこれと数時間の研究のために多くの方法を試しましたが、私にとってはうまくいかないようです。C#RightBoxでListBoxアイテムを選択するにはどうすればよいですか?

これは私の現在のコードであり、なぜ動作しないのか分かりません。

private void listBox1_MouseDown(object sender, MouseEventArgs e) 
    { 
     listBox1.SelectedIndex = listBox1.IndexFromPoint(e.X, e.Y); 
     if (e.Button == MouseButtons.Right) 
     { 
      contextMenuStrip1.Show(); 
     } 
    } 

また、私は私がちょうどマウスの右ボタンは、私が上でクリックした項目を選択させるための方法を探しています削除することができ、コンテキストメニューを気にしないでください。

すべてのアイデア?

+0

あなたはブレークポイントを設定した場合このメソッドでは、マウスの右ボタンを押したときにヒットしますか?それとも左? –

+0

私はそれを全く打つようには思われません – user1194782

+0

それからあなたはそれをまったく打っていない理由を調べる必要があります。コンボボックスのイベントにメソッドがバインドされていますか? (これは通常、InitialiseComponent()関数のデザイナによって追加されます) –

答えて

0

各コントロールはControlクラスからContextMenuプロパティを継承します。コンテクストメニューオブジェクトをリストボックスコントロールのContextMenuプロパティに割り当て、WinFormsは自動的にそれを処理します。

7

あなたは近くにいるので、項目を選択するのを忘れてしまった。修正:

private void listBox1_MouseUp(object sender, MouseEventArgs e) { 
     if (e.Button == MouseButtons.Right) { 
      var item = listBox1.IndexFromPoint(e.Location); 
      if (item >= 0) { 
       listBox1.SelectedIndex = item; 
       contextMenuStrip1.Show(listBox1, e.Location); 
      } 
     } 
    } 
0
private void listBox1_MouseUp(object sender, MouseEventArgs e) 
    { 
     if (e.Button== MouseButtons.Right) 
     { 
      int nowIndex = e.Y/listBox1.ItemHeight; 
      if (nowIndex < listBox1.Items.Count) 
      { 
       listBox1.SelectedIndex = e.Y/listBox1.ItemHeight; 
      } 
      else 
      { 
       //Out of rang 
      } 
     } 
    } 

私はC#であまり知らないが、私が試した:)私は同じ問題を扱った

0

。 Hans Passantの返信から、私は以下のコードを得るためにそれを少し微調整しました。私はまた、contextMenuStrip1.Show(listBox1, e.Location);をそこに置く必要はないことも分かった。それは自動的に私のために呼ばれました。

(Iは、Visual Studio 2010の究極とを使用して、私はまた、以下のコードは、のMouseUpとMouseDownイベントの両方のために動作することを確認し、.NET 4でコンパイルしています。)

private void OnMouseDown(object sender, MouseEventArgs args) 
    { 
     if (args.Button == MouseButtons.Right) 
     { 
      var item = this.IndexFromPoint(args.Location); 
      if (item >= 0 && this.SelectedIndices.Contains(item) == false) 
      { 
       this.SelectedItems.Clear(); 
       this.SelectedIndex = item; 
      } 
     } 
    } 
1
private void lstFiles_MouseDown(object sender, MouseEventArgs e) 
    { 
     if (e.Button == MouseButtons.Right) //(1) 
     { 
      int indexOfItemUnderMouseToDrag; 
      indexOfItemUnderMouseToDrag = lstFiles.IndexFromPoint(e.X, e.Y); //(2) 
      if (indexOfItemUnderMouseToDrag != ListBox.NoMatches) 
      { 
       lstFiles.SelectedIndex = indexOfItemUnderMouseToDrag; //(3) 
      } 
     } 
    } 
+0

何が起こっているのかの説明を追加できますか? – dmportella

関連する問題