Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Este exemplo baseia-se no exemplo de formulário de declaração automática integrando o objeto PenInputPanel. O exemplo está no diretório C# PIPanel na pasta AutoClaims.
Observação
Este exemplo requer que o seu sistema esteja equipado com um dispositivo de caneta. Se estiver a usar apenas um rato (ou outro dispositivo apontador (HID) de interface não humano), o PenInputPanel não aparece.
Para obter mais informações sobre o Exemplo de Formulário de Declarações Automáticas, consulte Exemplo de Formulário de Declarações Automáticas. Para obter mais informações sobre o objeto PenInputPanel, consulte Programar o Painel de Entrada Usando a Classe PenInputPanel.
Na amostra, o Formulário de Reclamações Automáticas contém cinco campos nos quais o usuário é solicitado a colocar informações relevantes para o sinistro: número da apólice, nome do segurado, ano, marca e modelo do carro. Um objeto PenInputPanel é anexado em cada campo de entrada para facilitar a inserção de valores com uma caneta.
Há duas técnicas para anexar um objeto PenInputPanel aos campos de entrada do seu formulário. A primeira técnica é atribuir uma instância separada do objeto a cada campo de entrada em tempo de design. O segundo é criar uma única instância do objeto e, em seguida, anexar essa instância do objeto em tempo de execução a um campo quando ele recebe foco. Este exemplo demonstra ambas as técnicas.
Há compromissos envolvidos ao decidir que técnica utilizar. Criar uma instância exclusiva do objeto para cada campo de formulário requer um pouco mais de memória quando o formulário é carregado. No entanto, evita a necessidade de manipular eventos de foco para atribuir uma única instância ao campo atual em tempo de execução.
Como o objeto PenInputPanel é suportado apenas num Tablet PC, o exemplo cria os objetos PenInputPanel dentro de um bloco de manejo de exceções.
Um objeto por campo
O exemplo demonstra a primeira técnica (um objeto PenInputPanel por campo), atribuindo aos campos de entrada para o número da apólice (inkEdPolicyNumber) e o nome do segurado (inkEdName) uma instância exclusiva do objeto PenInputPanel. Um construtor sobrecarregado para o objeto PenInputPanel pode tomar o nome do controle de entrada como um argumento, associando assim os controles. As seguintes linhas do manipulador de eventos Load do formulário mostram isso:
pipPolicyNumber = new PenInputPanel(inkEdPolicyNumber);
pipName = new PenInputPanel(inkEdName);
Um objeto por formulário
A segunda técnica também é mostrada no exemplo: uma única instância de um objeto PenInputPanel, pipShared, é compartilhada entre os campos de entrada Year, Make e Model. O objeto compartilhado é criado usando o construtor padrão.
pipShared = new PenInputPanel();
O uso dessa técnica requer que seu formulário tenha apenas uma única instância do objeto PenInputPanel. Isso economiza memória, mas você deve adicionar código para manipular o evento quando um campo de entrada recebe foco. Quando um controle que usa uma instância compartilhada de um objeto PenInputPanel obtém foco, defina a propriedade AttachedEditControl do objeto PenInputPanel para esse controle. O código a seguir mostra um manipulador de eventos para os eventos Enter dos campos Ano, Marca e Modelo.
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);
}
Certifique-se de definir todas as propriedades que precisam ser definidas quando o foco muda para um novo controle. Nos anteriores manipuladores de eventos, por exemplo, a propriedade Factoid é definida conforme apropriado.
Considerações sobre usabilidade
Tenha em mente as seguintes considerações de usabilidade ao usar o objeto PenInputPanel em seu aplicativo.
Posicionando o PenInputPanel
Como os campos são dispostos verticalmente no formulário neste exemplo, a interface de usuário PenInputPanel para cada controle de entrada é posicionada ligeiramente à direita do controle de entrada para facilitar o uso. Isso impede que o PenInputPanel cubra a próxima caixa de edição, facilitando o direcionamento da próxima caixa de edição.
pipShared.HorizontalOffset = 32;
pipPolicyNumber.HorizontalOffset = 32;
pipName.HorizontalOffset = 32;
Selecionando o painel de entrada para exibição
Como os números de política geralmente são combinações de números, letras e outros caracteres, eles podem ser propensos a erros de reconhecimento. Portanto, o exemplo define o painel padrão exibido pelo objeto PenInputPanel como o teclado quando está anexado ao campo do número da apólice.
pipPolicyNumber.DefaultPanel = PanelType.Keyboard;
O comportamento padrão do objeto PenInputPanel é usar o painel que o usuário selecionou por último.
Interface de usuário de correção da estrutura de serviços de texto
Neste exemplo, todos os campos de texto são controlos InkEdit . Isso é significativo porque o controlo InkEdit tem suporte interno para o Text Services Framework (TSF) e, como tal, é capaz de suportar a interface de utilizador de correção local para entrada recebida do objeto PenInputPanel.
O valor padrão para EnableTsf é TRUE. Isso faz com que o objeto PenInputPanel tente iniciar o TSF (Text Services Framework) no controle anexado. Se bem-sucedida, a interface do usuário de correção é exibida no controle e permite o acesso a alternativas de reconhecimento. Chamar esse método com um parâmetro FALSE tenta desligar o TSF no controle anexado.
O controle InkEdit já fornece uma interface de usuário de correção, mas no exemplo EnableTsf é usado para habilitar o PenInputPanel usar o contexto do reconhecedor de inserção TSF em vez da função SendInput para enviar os resultados do reconhecimento de manuscrito para o controle. O resultado é que o texto pode ser inserido mesmo que o campo não tenha mais foco.
pipName.EnableTsf(true);
pipPolicyNumber.EnableTsf(true);
Fechando o formulário
No código gerado pelo Windows Form Designer, os controles InkEdit e InkPicture são adicionados à lista de componentes do formulário quando o formulário é inicializado. Quando o formulário é fechado, os controles InkEdit e InkPicture são descartados, bem como os outros componentes do formulário, pelo método Dispose do formulário. O método Dispose do formulário também elimina os objetos Ink que são criados para o formulário.