2014-11-05 3 views
1

Я пытаюсь щелкнуть элементы в списке. Есть ли способ сделать это? Я хотел бы, чтобы нажимал на каждый из них по отдельности (и из этого действия записывайте на оборудование, изменяйте индикацию включения/выключения (полужирный шрифт) и обновляйте шестнадцатеричное значение для этого регистра.C# .net Сделать элементы списка viewable

Я нашел, как . щелкнуть на колоннах через MSDN, но я не могу понять, как нажать на пункты http://msdn.microsoft.com/en-us/library/system.windows.forms.listview.oncolumnclick

у меня нет большого опыта, но мне кажется, что я должен быть в состоянии взаимодействовать с Control.Onclick как-то: http://msdn.microsoft.com/en-us/library/system.windows.forms.control.onclick(v=vs.110).aspx

listview items that I want clickable

+1

Вы имеете в виду _ [FullRowSelect] (http://msdn.microsoft.com/en-us/library/system.windows.forms.listview.fullrowselect (v = vs.110) .aspx) _? – MickyD

+0

Не совсем, я хочу щелкнуть по каждому из них индивидуально, если это возможно со списком. – SwimBikeRun

+0

LV не имеет объекта Item или SubItem Click, но только DoubleClick с общими аргументами. Нетрудно подклассифицировать его и добавить событие «SubItemClick» путем переопределения «OnMouseUp», хотя – Plutonix

ответ

0

Попробуйте этот код.

Обращайтесь к событию ListView_MouseUp и запишите следующий код.

private void listView1_MouseUp(object sender, MouseEventArgs e) 
{ 
    if (listView1.View != View.Details) 
     return; 
    int rowIndex = getRowIndex(e.Location); 
    if (rowIndex == -1) 
     return ; 
    int columnIndex = getColumnIndex(e.Location); 
    if (columnIndex > -1) 
     OnCellClick(rowIndex, columnIndex); 
} 

Теперь создайте метод, чтобы получить индекс столбца в соответствии с положением мыши. Этот метод найдет индекс столбца в соответствии с положением мыши.

private int getColumnIndex(Point p) 
{ 
    Rectangle r = Rectangle.Empty; 
    r = Rectangle.Empty; 
    for (int i = 0; i < listView1.Columns.Count; i++) 
    { 
     r = new Rectangle(r.X + r.Width, 0, listView1.Columns[i].Width, listView1.Height); 
     if (r.Contains(p))    
      return i; 
    } 
    return -1; 
} 

Создайте еще один способ получения индекса строки в соответствии с положением мыши. Этот метод найдет индекс строки в соответствии с положением мыши, и он установит свойство List12. Таким образом, вы можете сосредоточиться на клике.

private int getRowIndex(Point p) 
{ 
    Rectangle r = Rectangle.Empty; 
    for (int i = 0; i < listView1.Items.Count; i++) 
    { 
     Rectangle r1 = listView1.GetItemRect(i); 
     r = new Rectangle(0, r1.Top, listView1.Width, r1.Height); 
     if (r.Contains(p)) 
     { 
      listView1.FocusedItem = listView1.Items[i]; 
      return i; 
     } 
    } 
    return -1; 
} 

Это метод, с которым вам нужно обращаться. Ваш код, чтобы получить значение из ячейки ListView, будет записан в этом методе.

private void OnCellClick(int RowIndex, int ColumnIndex) 
{ 

    MessageBox.Show("Column : " + ColumnIndex.ToString() + ", Row: " + RowIndex.ToString()); 
} 

Я знаю, что нет необходимости создавать метод для получения RowIndex. Мы можем получить товар непосредственно из местоположения, используя метод GetItemAt(x,y). Но этот метод работает только тогда, когда вы установили FullRowSelect в true, иначе вы получите null, когда позиция мыши находится в подпункте.

Смежные вопросы