Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

440
Views
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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!