안녕하세요 그레이프시티입니다.
.NET Framework에서 키보드 입력을 처리할 때에는 사전처리 단계와 일반 처리 단계로 나누어지는데, 사전처리 단계에서 처리된 키 입력은 KeyDown, KeyPress, KeyUp 이벤트를 발생시키지 않습니다.
Spread 컨트롤에서 방향키 입력은 사전처리 단계에서 사용되기 때문에, KeyDown 이벤트를 발생시키지 않습니다.
따라서, 방향키 입력에 따른 동작을 구현하시기 위해서는 아래 두가지 방법 중 하나를 사용하실 수 있습니다.
1. DialogKey 이벤트 사용
DialogKey 이벤트를 사용하여 방향키 입력을 캡쳐할 수 있으며, 해당 이벤트 내에 원하는 기능을 정의하여 사용하실 수 있습니다.
하기 샘플 코드를 참고하여주시기 바랍니다.
private void Form1_Load(object sender, EventArgs e)
{
// Spread의 활성 시트를 읽기모드로 설정합니다.
fpSpread1.ActiveSheet.OperationMode = FarPoint.Win.Spread.OperationMode.ReadOnly;
// Dialog 이벤트 추가
fpSpread1.DialogKey += FpSpread1_DialogKey;
}
private void FpSpread1_DialogKey(object sender, FarPoint.Win.Spread.DialogKeyEventArgs e)
{
// 위 방향키 입력시
if (e.KeyData == Keys.Up)
{
FarPoint.Win.Spread.FpSpread fpSpread = (FarPoint.Win.Spread.FpSpread)sender;
// 활성행을 이전 행으로 설정
if (fpSpread.ActiveSheet.ActiveRowIndex != 0)
{
fpSpread.ActiveSheet.ActiveRowIndex -= 1;
}
// 상세 보기
MessageBox.Show("ActiveRowIndex" + fpSpread.ActiveSheet.ActiveRowIndex);
}
// 아래 방향키 입력시
else if (e.KeyData == Keys.Down)
{
FarPoint.Win.Spread.FpSpread fpSpread = (FarPoint.Win.Spread.FpSpread)sender;
// 활성행을 다음 행으로 설정
fpSpread.ActiveSheet.ActiveRowIndex += 1;
// 상세 보여주기
MessageBox.Show("ActiveRowIndex" + fpSpread.ActiveSheet.ActiveRowIndex);
}
}
2. 방향키 동작 사용자 정의
읽기모드일 때 위아래 방향키 입력에 따른 사용자 정의 동작을 추가하여 원하시는 기능을 구현하실 수 있습니다.
샘플 코드를 첨부드립니다.
private void Form1_Load(object sender, EventArgs e)
{
// Spread의 활성 시트를 읽기모드로 설정합니다.
fpSpread1.ActiveSheet.OperationMode = FarPoint.Win.Spread.OperationMode.ReadOnly;
// ReadOnly 모드에서의 위아래 방향키 입력과 ActionKey를 매핑합니다.
FarPoint.Win.Spread.InputMap im = new FarPoint.Win.Spread.InputMap();
im = fpSpread1.GetInputMap(FarPoint.Win.Spread.InputMapMode.WhenAncestorOfFocused, FarPoint.Win.Spread.OperationMode.ReadOnly);
im.Put(new FarPoint.Win.Spread.Keystroke(Keys.Up, Keys.None), "ShowPreviousRowDetail");
im.Put(new FarPoint.Win.Spread.Keystroke(Keys.Down, Keys.None), "ShowNextRowDetail");
// ActionKey와 사용자정의 Action을 매핑합니다.
ActionMap am = fpSpread1.GetActionMap();
am.Put("ShowPreviousRowDetail", new ShowPreviousRowDetail());
am.Put("ShowNextRowDetail", new ShowNextRowDetail());
}
private class ShowPreviousRowDetail : FarPoint.Win.Spread.Action
{
public override void PerformAction(object source)
{
if (source is SpreadView)
{
SpreadView spread = (SpreadView)source;
SheetView sheet = spread.Sheets[spread.ActiveSheetIndex];
// 활성행을 이전 행으로 설정
if(sheet.ActiveRowIndex != 0)
{
sheet.ActiveRowIndex -= 1;
}
// 상세 보여주기
MessageBox.Show("ActiveRowIndex" + sheet.ActiveRowIndex);
}
}
}
private class ShowNextRowDetail : FarPoint.Win.Spread.Action
{
public override void PerformAction(object source)
{
if (source is SpreadView)
{
SpreadView spread = (SpreadView)source;
SheetView sheet = spread.Sheets[spread.ActiveSheetIndex];
// 활성행을 다음 행으로 설정
sheet.ActiveRowIndex += 1;
// 상세 보여주기
MessageBox.Show("ActiveRowIndex: " + sheet.ActiveRowIndex);
}
}
}
관련된 도움말 및 온라인 스터디 링크를 전달드립니다.
링크된 문서를 참고하여 주시기 바랍니다.
도움말 - 기본 키 입력 처리
온라인 스터디 - 키보드 상호 작용
다른 궁금한 점이 생기면, 문의 주시기 바랍니다.
감사합니다.
그레이프시티 드림
* 그레이프시티(GrapeCity)는 개발자를 위하여 ComponentOne(컴포넌트원), Spread(스프레드), ActiveReports(액티브리포츠), SpreadJS(스프레드JS), Wijmo(위즈모)와 같은 엑셀 스프레드시트 리포팅 그리드와 차트 등 다양한 종류의 .NET JavaScript(자바스크립트) 컴포넌트 툴을 생산하고있는 개발툴 전문 회사 입니다.