2017-05-20 19 views
1

我正在做一個ListView實驗,並面臨與其選擇矩形問題。我創建了一個Windows窗體應用程序,將2個ListView控件(listView1,listView2)放到Form1上。.Net WinForms。 ListView的選擇矩形如何以編程方式控制?

我設置如下在設計時控件的屬性:

ListView1的:新增3個項目( 「項目1」, 「項目2」, 「項目3」)

listView2:的AllowDrop =真。

enter image description here

我寫代碼來ListView1的拖放項目listView2如下。

using System; 
using System.Windows.Forms; 

namespace WindowsFormsApplication2 
{ 
    public partial class Form1 : Form 
    { 
     public Form1() 
     { 
      InitializeComponent(); 
     } 

     private void listView1_MouseDown(object sender, MouseEventArgs e) 
     { 
      ListView listView = ((ListView)sender); 
      ListViewItem listViewItem = listView.GetItemAt(e.X, e.Y); 
      if (listViewItem != null) 
      { 
       listView.DoDragDrop(listViewItem, DragDropEffects.Move); 
      } 
     } 

     private void listView2_DragEnter(object sender, DragEventArgs e) 
     { 
      e.Effect = DragDropEffects.Move; 
     } 

     private void listView2_DragDrop(object sender, DragEventArgs e) 
     { 
      ListView listView = ((ListView)sender); 
      ListViewItem listViewItem = ((ListViewItem)e.Data.GetData(typeof(ListViewItem))); 
      listView1.Items.Remove(listViewItem); 
      listView.Items.Add(listViewItem); 
     } 
    } 
} 

現在我正在運行應用程序並將listView1中的項目拖放到listView2。

enter image description here

enter image description here

enter image description here

enter image description here

在這裏,我鬆開鼠標左鍵。 listView1中的項目成功導出到目標,但在listView1中,選擇矩形正在繪製

enter image description here

鼠標左鍵被釋放後,我沒有按任何其他鍵,也就是所有的按鈕都在UP狀態,但ListView1的正高興地反應,鼠標移動事件和不斷變化的選擇。

enter image description here enter image description here

我無法找到一個方法來禁用選擇矩形。我明白它的系統正在做這一切。在我看來,.Net開發人員無法爲此做任何事情。所以我決定問:

.NET開發人員如何以編程方式控制ListView的選擇矩形?

+0

您好!可能是你應該禁用MultiSelect propery? –

+0

這是因爲你已經釋放了第一個ListView中的MouseUp,並且它仍然「在想」MouseUp還沒有開始 –

+0

Capture屬性仍然處於打開狀態。發生,因爲你使用錯誤的事件來做到這一點,改用ListView.ItemDrag。 –

回答

1

相反的MouseDown(),發起MouseMove()這樣的阻力:

private void listView1_MouseMove(object sender, MouseEventArgs e) 
{ 
    if (e.Button == MouseButtons.Left) 
    { 
     ListView listView = ((ListView)sender); 
     ListViewItem listViewItem = listView.GetItemAt(e.X, e.Y); 
     if (listViewItem != null) 
     { 
      listView.DoDragDrop(listViewItem, DragDropEffects.Move); 
     } 
    } 
} 
+0

親愛的@Idle_Mind。您的解決方案正在回答業務邏輯中的所有要求。看來在ListView控件中,mousemove事件是拖動應該啓動的地方。我會提高你的答案。但我想知道是否有一種方法來控制.NET的ListView的選擇矩形。 .NET開發人員如何以編程方式控制ListView的選擇矩形? – Bahrom

相關問題