! 제품 버전을 정확하게 입력해 주세요.
제품 버전이 정확하게 기재되어 있지 않은 경우,
최신 버전을 기준으로 안내 드리므로
더욱 빠르고 명확한 안내를 위해
제품 버전을 정확하게 입력해 주세요!

[Winforms] Change 이벤트와 Ctrl+V > 온라인 스터디

본문 바로가기

11. 기타 [Winforms] Change 이벤트와 Ctrl+V

페이지 정보

작성자 GrapeCity 작성일 2021-11-17 15:06 조회 1,129회 댓글 0건

본문

스프레드에 데이터를 입력할 때, Ctrl + V와 같은 단축키를 사용하면 작업 효율을 크게 향상시킬 수 있습니다.

스프레드는 셀의 조작을 순간 포착할 수 있는 다양한 이벤트 기능을 제공하며, 그 중 Change 이벤트는 셀 데이터의 변화를 감지하여 셀 데이터가 수정된 후 발생하는 이벤트입니다. 그러나 Change 이벤트는 Ctrl + V를 통한 변화를 감지할 수 없어, 해당 단축키로 데이터를 입력했을 때 이벤트가 발생하게 하기 위해서는 Change 이벤트 내부에 이를 확인하는 코드를 추가해야 합니다.

본문에서는 Ctrl+V로 인한 셀 데이터 변화를 Change 이벤트가 감지하게 하는 방법을 살펴보겠습니다.


  1. 도구상자에서 FpSpread 컨트롤을 찾아 Form으로 가져옵니다.

    01_AddFpSpread 

  2. 아래 코드를 사용하여, 컨트롤의 네 모서리가 Form의 네 모서리에 도킹되게 합니다. Form의 크기 변화에 따라 스프레드 컨트롤의 사이즈도 함께 변화하게 됩니다.

    fpSpread1.Dock = DockStyle.Fill;


  3. 코드 상에 Change 이벤트KeyDown 이벤트를 추가합니다.

    • Change 이벤트: 사용자가 셀 데이터를 수정한 후에 발생합니다.

    • KeyDown 이벤트: 컨트롤에 포커스가 있는 동안 키를 누르면 발생합니다.

    fpSpread1.Change += new ChangeEventHandler(fpSpread1_Change);
    fpSpread1.KeyDown += new KeyEventHandler(fpSpread1_KeyDown);
  4. Change 이벤트를 정의합니다. 예제에서는 셀 데이터가 수정되었을 때 메세지 박스에 "Change Event Occured!"라는 메세지가 나타나도록 코드를 추가하였습니다.

    private void fpSpread1_Change(object sender, ChangeEventArgs e)
    {
        MessageBox.Show("Change Event Occured!");
    }

  5. KeyDown 이벤트를 정의합니다. 우선, 조건문을 사용하여 키가 눌렸을 때 눌린 키가 Ctrl + v인지 확인합니다.

    private void fpSpread1_KeyDown(object sender, KeyEventArgs e)
    {
      if(e.Control && (e.KeyCode == Keys.V))
      {
          ...
      }
    }

  6. 조건문 내부에서 Change 이벤트를 호출하여, Ctrl+V 가 눌렸을 때 Change 이벤트가 발생하도록 합니다.

    int row = fpSpread1.ActiveSheet.ActiveRowIndex;
    int col = fpSpread1.ActiveSheet.ActiveColumnIndex;
    ChangeEventArgs param = new ChangeEventArgs(null, row, col);
    fpSpread1_Change(null, param);

  7. 코드를 실행하면, 셀에 새로운 데이터를 입력하거나 Ctrl+V를 눌렀을 때 Change 이벤트가 발생하는 것을 확인할 수 있습니다.

    ChageEventWithPaste  

  8. 단, 위 상태에서는 빈 셀을 Ctrl+C 하여 다른 셀에 Ctrl+V를 했을 때에도 Change 이벤트가 발생합니다. 또는 데이터가 입력된 셀에 동일한 데이터를 Ctrl+C 후 Ctrl+V를 눌러 붙여넣어도 해당 이벤트가 발생합니다. 이처럼 데이터 변경 없이 Change 이벤트가 발생하는 것을 방지하기 위해, 다음과 같이 조건문을 추가하여 KeyDown 이벤트를 수정할 수 있습니다.

    object value;
    ​
    private void fpSpread1_KeyDown(object sender, KeyEventArgs e)
    {
    if (e.Control && (e.KeyCode == Keys.V))
      {
          if (value != fpSpread1.ActiveSheet.ActiveCell.Value)
          {
              int row = fpSpread1.ActiveSheet.ActiveRowIndex;
              int col = fpSpread1.ActiveSheet.ActiveColumnIndex;
              ChangeEventArgs param = new ChangeEventArgs(null, row, col);
              fpSpread1_Change(null, param);
          }
      }
      else if (e.Control && (e.KeyCode == Keys.C))
      {
          int row = fpSpread1.ActiveSheet.ActiveRowIndex;
          int col = fpSpread1.ActiveSheet.ActiveColumnIndex;
          value = fpSpread1.ActiveSheet.Cells[row, col].Value;
      }
    }

샘플을 다운로드하여 전체 코드를 확인해 보실 수 있습니다.

Change 이벤트와 붙여넣기 - 샘플 다운로드




지금 바로 Spread.NET을 다운로드하여 직접 테스트해보세요!

spnet.png


  • 페이스북으로 공유
  • 트위터로  공유
  • 링크 복사
  • 카카오톡으로 보내기

댓글목록

등록된 댓글이 없습니다.

메시어스 홈페이지를 통해 제품에 대해서 더 자세히 알아 보세요!
홈페이지 바로가기

태그1

인기글

더보기
  • 인기 게시물이 없습니다.
메시어스 홈페이지를 통해 제품에 대해서 더 자세히 알아 보세요!
홈페이지 바로가기
이메일 : sales-kor@mescius.com | 전화 : 1670-0583 | 경기도 과천시 과천대로 7길 33, 디테크타워 B동 1107호 메시어스(주) 대표자 : 허경명 | 사업자등록번호 : 123-84-00981 | 통신판매업신고번호 : 2013-경기안양-00331 ⓒ 2024 MESCIUS inc. All rights reserved.