PenInputPanel 샘플
이 샘플은 PenInputPanel 개체를 통합하여 자동 클레임 양식 샘플을 기반으로 합니다. 샘플은 AutoClaims 폴더의 C# PIPanel 디렉터리에 있습니다.
참고
이 샘플을 사용하려면 시스템에 펜 디바이스가 있어야 합니다. 마우스(또는 다른 HID(비인간 인터페이스 디바이스) 포인팅 디바이스만 사용하는 경우 PenInputPanel 이 표시되지 않습니다.
자동 클레임 양식 샘플에 대한 자세한 내용은 자동 클레임 양식 샘플을 참조하세요. PenInputPanel 개체에 대한 자세한 내용은 PenInputPanel 클래스를 사용하여 입력 패널 프로그래밍을 참조하세요.
샘플에서 자동 클레임 양식에는 사용자가 클레임과 관련된 정보를 입력하라는 메시지가 표시되는 5개의 필드가 포함되어 있습니다. 정책 번호, 보험 이름, 연도, 확인 및 자동차 모델. PenInputPanel 개체는 펜으로 값을 입력하는 쉬운 방법을 제공하기 위해 각 입력 필드에 연결됩니다.
폼의 입력 필드에 PenInputPanel 개체를 연결하는 두 가지 기술이 있습니다. 첫 번째 기술은 디자인 타임에 각 입력 필드에 개체의 별도 instance 할당하는 것입니다. 두 번째는 개체의 단일 instance 만든 다음, 포커스를 받을 때 런타임에 해당 개체 instance 필드에 연결하는 것입니다. 이 샘플에서는 두 가지 기술을 모두 보여 줍니다.
사용할 기술을 결정하는 데는 단점이 있습니다. 각 양식 필드에 대한 개체의 고유한 instance 만들려면 폼이 로드될 때 약간 더 많은 메모리가 필요합니다. 그러나 런타임에 현재 필드에 단일 instance 할당하기 위해 필드에 대한 포커스 이벤트를 처리할 필요가 없습니다.
PenInputPanel 개체는 태블릿 PC에서만 지원되므로 샘플은 예외 처리 블록 내에 PenInputPanel 개체를 만듭니다.
필드당 하나의 개체
이 샘플에서는 PenInputPanel 개체의 고유한 instance 정책 번호() 및 피보험자 이름(inkEdPolicyNumber
)에 대한 입력 필드를 할당하여 첫 번째 기술(inkEdName
필드당 하나의 PenInputPanel 개체)을 보여 줍니다. PenInputPanel 개체에 대해 오버로드된 생성자는 입력 컨트롤의 이름을 인수로 사용하여 컨트롤을 연결할 수 있습니다. 양식의 Load 이벤트 처리기에서 다음 줄은 다음과 같습니다.
pipPolicyNumber = new PenInputPanel(inkEdPolicyNumber);
pipName = new PenInputPanel(inkEdName);
양식당 하나의 개체
두 번째 기술은 샘플에도 표시됩니다. PenInputPanel 개체pipShared
의 단일 instance , 는 Year, Make 및 Model 입력 필드 간에 공유됩니다. 공유 개체는 기본 생성자를 사용하여 만들어집니다.
pipShared = new PenInputPanel();
이 기술을 사용하려면 양식에 PenInputPanel 개체의 instance 하나만 있어야 합니다. 이렇게 하면 메모리가 저장되지만 입력 필드가 포커스를 받을 때 이벤트를 처리하는 코드를 추가해야 합니다. PenInputPanel 개체의 공유 instance 사용하는 컨트롤이 포커스를 받으면 PenInputPanel 개체의 AttachedEditControl 속성을 해당 컨트롤로 설정합니다. 다음 코드에서는 Year, Make 및 Model 필드의 Enter
이벤트에 대한 이벤트 처리기를 보여 줍니다.
private void inkEdYear_Enter(object sender, System.EventArgs e)
{
// Attach the shared PenInputPanel to the Year field
pipShared.AttachedEditControl = inkEdYear;
// set the NUMBER factoid to bias recognition for numbers
pipShared.Factoid = "NUMBER";
// Enable correction UI on the inkEdYear field
pipShared.EnableTsf(true);
}
private void inkEdMake_Enter(object sender, System.EventArgs e)
{
// Attach the shared PenInputPanel to the Make field
pipShared.AttachedEditControl = inkEdMake;
// reset the factoid to bias recognition for general text
pipShared.Factoid = "DEFAULT";
// Enable correction UI on the inkEdMake field
pipShared.EnableTsf(true);
}
private void inkEdModel_Enter(object sender, System.EventArgs e)
{
// Attach the shared PenInputPanel to the Model field
pipShared.AttachedEditControl = inkEdModel;
// reset the factoid to bias recognition for general text
pipShared.Factoid = "DEFAULT";
// Enable correction UI on the inkEdModel field
pipShared.EnableTsf(true);
}
포커스가 새 컨트롤로 변경될 때 설정해야 하는 속성을 설정해야 합니다. 예를 들어 이전 이벤트 처리기에서 Factoid 속성은 적절하게 설정됩니다.
유용성 고려 사항
애플리케이션에서 PenInputPanel 개체를 사용할 때는 다음과 같은 유용성 고려 사항을 염두에 두어야 합니다.
PenInputPanel 위치 지정
필드가 이 샘플의 폼에 세로로 배치되므로 각 입력 컨트롤에 대한 PenInputPanel 사용자 인터페이스는 입력 컨트롤의 오른쪽에 약간 배치되어 사용하기 쉽습니다. 이렇게 하면 PenInputPanel이 다음 편집 상자를 가리지 않으므로 다음 편집 상자를 더 쉽게 대상으로 지정할 수 있습니다.
pipShared.HorizontalOffset = 32;
pipPolicyNumber.HorizontalOffset = 32;
pipName.HorizontalOffset = 32;
표시할 입력 패널 선택
정책 번호는 종종 숫자, 문자 및 기타 문자의 조합이므로 인식 오류가 발생하기 쉽습니다. 따라서 샘플은 PenInputPanel 개체가 표시하는 기본 패널을 정책 번호 필드에 연결할 때 키보드로 설정합니다.
pipPolicyNumber.DefaultPanel = PanelType.Keyboard;
PenInputPanel 개체의 기본 동작은 사용자가 마지막으로 선택한 패널을 사용하는 것입니다.
Text Services 프레임워크 수정 사용자 인터페이스
이 샘플에서는 모든 입력 필드가 InkEdit 컨트롤입니다. 이는 InkEdit 컨트롤이 TSF( Text Services Framework )를 기본적으로 지원하므로 PenInputPanel 개체에서 받은 입력에 대한 현재 위치 수정 사용자 인터페이스를 지원할 수 있기 때문에 중요합니다.
EnableTsf의 기본값은 TRUE입니다. 이로 인해 PenInputPanel 개체가 연결된 컨트롤에서 TSF(Text Services Framework)를 시작하려고 시도합니다. 성공하면 수정 사용자 인터페이스가 컨트롤에 표시되고 인식 대체 항목에 액세스할 수 있습니다. FALSE 매개 변수를 사용하여 이 메서드를 호출하면 연결된 컨트롤에서 TSF를 종료하려고 시도합니다.
InkEdit 컨트롤은 이미 수정 사용자 인터페이스를 제공하지만 샘플 EnableTsf에서는 PenInputPanel이 SendInput 함수가 아닌 TSF 삽입 인식기 컨텍스트를 사용하여 필기 인식 결과를 컨트롤로 보낼 수 있도록 하는 데 사용됩니다. 그 결과 필드에 포커스가 더 이상 없더라도 텍스트를 삽입할 수 있습니다.
pipName.EnableTsf(true);
pipPolicyNumber.EnableTsf(true);
양식 닫기
Windows Form Designer 생성된 코드에서 양식이 초기화될 때 InkEdit 및 InkPicture 컨트롤이 양식의 구성 요소 목록에 추가됩니다. 폼이 닫히면 폼의 Dispose 메서드에 의해 InkEdit 및 InkPicture 컨트롤과 양식의 다른 구성 요소가 삭제됩니다. 폼의 Dispose 메서드는 양식에 대해 만들어진 Ink 개체도 삭제합니다.