Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

451
Visualizações
Evento de Visio VSTO Add-in QueueMarker de la acción del usuario de la hoja de forma, agregando una forma pero obteniendo dos formas al rehacer

En las formas de Visio en una página de Visio, la única forma de agregar la funcionalidad del complemento de Office al menú contextual del mouse en las formas de Visio es usar la función de hoja de forma QUEUEMARKEREVENT .

Desafortunadamente, esta forma de permitir que el usuario use la funcionalidad en una forma de Visio está causando problemas con el sistema Deshacer/Rehacer.

He creado un código de muestra a continuación que se puede colocar en un nuevo proyecto Visio VSTO VB.NET en Visual Studio (uso 2019, Visio también la versión 2019)

Compile el complemento de VSTO y, cuando se inicie Visio, elija un Diagrama básico que abra la plantilla que uso para la prueba.

Coloque una forma en la página y edite ShapeSheet para agregar una sección de acción, como se muestra en esta captura de pantalla:

ingrese la descripción de la imagen aquí

En esta forma, en el menú contextual, encontrará el elemento de menú "Prueba". Ejecute este elemento y se agregará una nueva forma cuadrada a la página.

Ahora use Deshacer y luego realice un Rehacer. Si mueve la nueva forma, verá que debajo hay una forma cuadrada idéntica. Un Redo no agrega una, sino dos formas nuevas.

Creo que estoy malinterpretando algo sobre cómo funcionan los eventos de QueueMarker. Solo soy un desarrollador aficionado, espero que alguien sepa cómo solucionar esto de manera sólida, ya que el comportamiento confiable de Deshacer/Rehacer es muy importante para una buena aplicación de complemento. ¡Gracias por compartir tus conocimientos!

 Imports System.Windows.Forms Imports System.Diagnostics Imports System.Text Imports Visio = Microsoft.Office.Interop.Visio Partial Public Class ThisAddIn Private Sub Application_MarkerEvent(app As Visio.Application, SequenceNum As Integer, ContextString As String) Handles Application.MarkerEvent Dim Stencil As Visio.Document Stencil = GetStencil() If Stencil Is Nothing Then MessageBox.Show("The Basic Shapes stencil is closed, please open it before running this action.") Exit Sub End If Dim Square As Visio.Shape Square = Application.ActivePage.Drop(Stencil.Masters.ItemU("Square"), 0, 0) End Sub Private Function GetStencil() As Visio.Document Dim DocCounter As Long For DocCounter = 1 To Application.Documents.Count If Application.Documents(DocCounter).Type = Visio.VisDocumentTypes.visTypeStencil Then If Application.Documents(DocCounter).Name = "BASIC_M.vssx" Or Application.Documents(DocCounter).Name = "BASIC_U.vssx" Then 'MessageBox.Show(Application.Documents(DocCounter).Name) Return Application.Documents(DocCounter) Exit Function End If End If Next DocCounter Return Nothing End Function End Class
over 4 years ago · Santiago Trujillo
1 Respostas
Responde à pergunta

0

Creo que MarkerEvent se genera dos veces en Redo. ¿Puede verificar que ContextString sea == "Prueba" antes de procesarlo y ver si ayuda?

over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda