Como você "visualiza" ações do usuário como redimensionar ou editar em godiagrams?

StackOverflow https://stackoverflow.com/questions/111744

  •  02-07-2019
  •  | 
  •  

Pergunta

  • O modelo de objeto Godiagram tem um godocument.
  • GoViews tem uma referência a um godocument.
  • Se o usuário fizer alguma modificação na superfície da diagramação, um evento Godocument.Changed será levantado com as informações relevantes nos argumentos do evento.

Gostaria de ser notificado quando algumas ações de usuário acontecerem, para que eu possa conferir com meu controlador (proibir/cancelar, se necessário) e depois emitir os pedidos de visualização a partir daí que realmente modificam o Northwoods Godiagram Componente de terceiros.
O evento alterado é uma notificação de que algo acabou de acontecer (pretérito) - fazendo tudo o que é acima no manipulador de eventos resulta em um .... (espere por isso) ... StackOverflowException. (Godocument.Changed Handler> Atualizações Godocument> disparando novos eventos alterados ..)

Então, questione, como faço para obter um modelo de notificação antes de avaliar ou serforesismo em godiagramas? Alguém que esteve lá viveu para contar uma história?

Foi útil?

Solução

JFYI ... A recomendação do vendedor de componente é subclasse e substituir os métodos apropriados para isso. Substitua o método bool canxxx (), aumente um evento personalizado cancelável. Se o assinante retornar falso, resgate (Retorne falso para abortar a ação do usuário) de canxxx.Nenhum mecanismo integrado para isso nos godiagramas.

Por exemplo, você pode definir um evento CustomView.ObjectSizing cancelável. Na sua substituição de goteolresizando.CanStart, você pode aumentar esse evento. Se a propriedade Canceventargs.Cancel se tornar verdadeira, você teria canSTART () Return False.

Fonte http://www.nwoods.com/forum/forum_posts.asp?tid=2745

Outras dicas

Os argumentos do evento (gochangedEventArgs) para o evento de mudança possuem um imóvel isbeforeChanging, que indica se o evento de mudança foi levantado do método "RaiseChanging" (true) ou o RaiseChanged (false). Isso deve dizer se a mudança ocorreu ainda, mas não sei como cancelá -la.

O melhor que posso sugerir é em vez de verificar se a alteração for permitida e executá -la, verifique se a alteração é não permitido, e se não é chamado de método "desfazer" nos argumentos no evento de mudança. Então, essencialmente:

OnChanged(GoChangedEventArgs e)
{
  if(NotAllowed)
  {
    e.Undo();
  }
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top