2010-06-12 4 views
7

목록보기에 복사 붙여 넣기를 추가하는 쉬운 방법이 있습니까? 아니면 대신 DataGridView로 전환해야합니까?복사하여 붙여 넣기 목록보기

내 응용 프로그램은 주소록과 비슷하지만 전자 메일, 숫자 등이 들어있어 복사 붙여 넣기가 유용합니다.

답변

1

그냥 KeyDown에 대한 이벤트 처리기에 넣어 설명서를 복사 및 붙여 넣기를 할 매우 어렵지 않다 (또는 어쩌면 KeyPress 기억 할 수는 없지만 상당히 확실히 그들 중 하나입니다)와 e.KeyCode보고 키를 누르면 내용을 확인 e.Control이 참인지 확인하십시오. x, c 또는 v 중 하나 인 경우 클립 보드에서 읽고 쓰려면 Clipboard.SetText 또는 Clipboard.GetText을 호출하십시오.
Clipboard 클래스의 MSDN 설명서는 here을 참조하십시오.

복사 및 붙여 넣기를 사용하여 상황에 맞는 메뉴를 추가하여 ListView에 추가하여 완성시킬 수 있습니다.

+0

그의 문제 셀을 선택하기위한 몇 가지 참신한 트릭이 없으면 난 단지, 전체 행을 복사하는 관리이다. – Zubirg

+0

@ Zubirg : 예, ListView에 셀이 없다는 것을 잊었습니다. DataGridView로 전환하는 것이 더 쉬울 수도 있습니다. 그러나'ListView'를 고집하고 싶다면 클릭 한 하위 항목을 계산하고 그 하위 항목의'BackColor'를 변경하여 선택한 것으로 보이게하기 위해'Click' 및'MouseDown' 이벤트를 처리하는 것과 같은 일을 할 수 있습니다 그런 다음 해당 하위 항목에 대한 복사 및 붙여 넣기를 처리 할 수 ​​있습니다. Item에 'UseItemStyleForSubItems = false;'를 설정해야합니다. 그렇지 않으면 하위 항목에 색상이 표시되지 않습니다. –

11

예는 아래 클립 보드 명령 사본 Ctrl 키-C, 복사 모든 선택된 행에서 두 번째 열의 값 처리 :

private void resultsListView_KeyUp(object sender, KeyEventArgs e) 
    { 
     if (sender != resultsListView) return; 

     if (e.Control && e.KeyCode == Keys.C) 
      CopySelectedValuesToClipboard(); 
    } 

    private void CopySelectedValuesToClipboard() 
    { 
     var builder = new StringBuilder(); 
     foreach (ListViewItem item in resultsListView.SelectedItems) 
      builder.AppendLine(item.SubItems[1].Text); 

     Clipboard.SetText(builder.ToString()); 
    } 

참조 :

  1. What is the KeyChar for Ctrl+C and Ctrl+V in C#하여 얻을을 키 및 적절한 이벤트 핸들러. ListView를 클립 보드에 복사하는 예제는
  2. Copy ListView to Clipboard in VB.NET, C#, and VB6입니다.
+0

좋은 해결책, 나는 단지'KeyDown' 이벤트로 그렇게해야했습니다. 'KeyUp'은 작동하지 않았습니다. 왜냐하면'c'를 누르면 ListBox의 첫 번째 항목이'c'로 시작하여 자동으로 다중 선택을 단일 항목으로 렌더링하기 때문입니다. – derFunk

0

내 요구 사항은 일련 번호 목록을 클립 보드에 복사하는 버튼을 추가하는 것이 었습니다. 나는 정상적인 방식으로 버튼을 추가 한 후 다음 방법을 추가 :

private void btnClipboard_Click(object sender, EventArgs e) 
{ 
    String clipText = string.Empty; 
    foreach (ListViewItem item in lstSerials.Items) 
    { 
     clipText += item.SubItems[0].Text; 
     clipText += Environment.NewLine; 
    } 
    if (!String.IsNullOrEmpty(clipText)) 
    { 
     Clipboard.SetText(clipText); 
    } 
} 
관련 문제