2014-02-23 3 views
2

목록보기 및 변경 값의 하위 항목 :선택과 같이 보인다 나는 "세부 사항"모드에서 목록보기를

################# 
Name # Property 
################# 
#Itm1 # Subitm1 
#Itm2 # Subitm2 
################# 

매우 간단,하지만 난으로 실행하고있는 문제는에서 "Subitm1"를 선택 할 수있다 런타임시 목록. 첫 번째 열의 모든 항목을 선택하고 강조 표시 할 수 있지만 두 번째 열의 항목을 클릭하면 아무것도 수행되지 않습니다 (첫 번째 열과 같이 항목을 강조 표시 할 것으로 예상됩니다).

특히 사용자가 하위 항목을 두 번 클릭하고 목록보기에서 값을 직접 변경할 수있는 기능을 추가하려고합니다. 여기에 누락 된 특정 설정이 있습니까?

+0

wpf, winform, else? – har07

+0

플랫폼은 winform –

+0

입니다. ListView 컨트롤을 사용하여이 작업을 수행 할 수는 있지만 설정하는 것은 어렵습니다. 대신 Grid 컨트롤을 사용하는 것에 대해 생각해 보셨습니까? –

답변

7

하위 항목을 클릭 할 때 전체 행을 선택하려면 FullRowSelect 속성 인 ListView을 사용해보십시오. 는 하위 항목을 더블 클릭을 처리하기 위해,이 시도 :리스트 뷰에서 하위 항목의 텍스트를 편집 할 최종 사용자를 허용하려면

private void listView1_MouseDoubleClick(object sender, MouseEventArgs e) 
{ 
    ListViewHitTestInfo hit = listView1.HitTest(e.Location); 
    // Use hit.Item 
    // Use hit.SubItem 
} 

, 내가 가장 쉬운 방법은 그리드 컨트롤을 사용하는 것입니다 두려워 해요. 다른 방법은 다음과 같이 시도하는 것입니다.

private readonly TextBox txt = new TextBox { BorderStyle = BorderStyle.FixedSingle, Visible = false }; 

public Form1() 
{ 
    InitializeComponent(); 
    listView1.Controls.Add(txt); 
    listView1.FullRowSelect = true; 
    txt.Leave += (o, e) => txt.Visible = false; 
} 

private void listView1_MouseDoubleClick(object sender, MouseEventArgs e) 
{ 
    ListViewHitTestInfo hit = listView1.HitTest(e.Location); 

    Rectangle rowBounds = hit.SubItem.Bounds; 
    Rectangle labelBounds = hit.Item.GetBounds(ItemBoundsPortion.Label); 
    int leftMargin = labelBounds.Left - 1; 
    txt.Bounds = new Rectangle(rowBounds.Left + leftMargin, rowBounds.Top, rowBounds.Width - leftMargin - 1, rowBounds.Height); 
    txt.Text = hit.SubItem.Text; 
    txt.SelectAll(); 
    txt.Visible = true; 
    txt.Focus(); 
} 
+0

안녕하세요, 어쨌든 편집중인 항목이 속한 열을 확인 하시겠습니까? –