簡體   English   中英

C#.net使listview項目可單擊

[英]C# .net Make listview items clickable

我正在嘗試單擊列表視圖中的項目。 有沒有辦法做到這一點? 我想單獨單擊每個按鈕 (然后從該操作中寫入硬件,更改開/關指示(粗體),並更新該寄存器的十六進制值。

我已經找到了如何通過msdn單擊列,但是我無法弄清楚如何單擊項目。 http://msdn.microsoft.com/en-us/library/system.windows.forms.listview.oncolumnclick

我沒有太多經驗,但是似乎我應該可以通過Control.Onclick進行界面交互: http : //msdn.microsoft.com/zh-cn/library/system.windows.forms.control.onclick( v = vs.110)的.aspx

我想要點擊的listview項

試試這個代碼。

處理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;
}

創建另一個方法以根據鼠標位置獲取行索引。 此方法將根據鼠標位置找到行索引,並將設置ListView的FocusedItem屬性。 因此,您可以將重點放在單擊的項目上。

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)方法直接從位置獲取Item。 但是,僅當您將FullRowSelect設置為true時,此方法才有效,否則當鼠標位置在子項目上時您將獲得null

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM