【问题标题】:How to add multiple texts on Visio connector shapes using the c#/vba code?如何使用 c#/vba 代码在 Visio 连接器形状上添加多个文本?
【发布时间】:2022-11-18 05:33:10
【问题描述】:

我想按照下图在连接线上添加多个文本。我正在使用 C# 代码来自动化该过程。以下是我使用过的代码。它没有像我预期的那样给出准确的输出。在这方面的任何帮助将不胜感激。

Visio.Shape vsoLastShape = visioPage.Shapes.get_ItemFromID(lastshapeID);
vsoLastShape.ConvertToGroup();
                            
Visio.Selection vsoSelections = app.ActiveWindow.Selection;
vsoSelections.Select(vsoLastShape, (short)VisSelectArgs.visSelect);

Visio.Shape vsoGroupShape = vsoSelections.Group();

vsoGroupShape.Text = "Testing 12";
vsoGroupShape.TextStyle.PadLeft(10);

【问题讨论】:

    标签: c# vba visio


    【解决方案1】:

    无论您使用什么方法(手动、C#、VBA 或其他),一个形状只能包含一个文本。如果要添加多个文本,则需要将形状转换为分组形状。然后,您可以向组中添加一个形状,并将该子形状的文本设置为您想要的内容。

    【讨论】:

    • 我在我的代码中做了同样的事情,将形状转换为一个组,但是在向组添加文本时它不起作用。你能提出我的代码的问题吗,因为它没有像我预期的那样工作。
    • 您的代码现在进行了两次分组,ConvertToGroup() 和 Group()。您不需要 .Group()。将 vsoGroupShape 设置为 ConvertToGroup 的结果。然后向页面添加一个新形状,将其命名为 vsoNewShape,设置其文本和位置,然后将其添加到组中。
    【解决方案2】:

    与 .Text 结合使用的 Shape .Characters 对象具有一定的灵活性。

        private string nl = Environment.NewLine;
        public void MultiText() {
        try {
            // using = System.Windows.Forms;
            // using Vis = Microsoft.Office.Interop.Visio;
    
            Vis.Application app = Globals.ThisAddIn.Application; // or launch Visio 
            Vis.Document vDoc = app.Documents.Add(""); // new blank document
    
            Vis.Shape c1 = app.ActivePage.DrawOval(1, 1, 1.5, 1.5);
            Vis.Shape s1 = app.ActivePage.DrawLine(1.5, 1.25, 4, 1.25);
            s1.Text = $"Shape1{nl}Line2";
            Vis.Shape c2 = app.ActivePage.DrawOval(4, 1, 4.5, 1.5);
    
            Vis.Shape c3 = app.ActivePage.DrawOval(1, 3, 1.5, 3.5);
            Vis.Shape s2 = app.ActivePage.DrawLine(1.5, 3.25, 4, 3.25);
            s2.Text = $"Shape2";
            Vis.Shape c4 = app.ActivePage.DrawOval(4, 3, 4.5, 3.5);
            
            app.ActiveWindow.CenterViewOnShape(c4, Vis.VisCenterViewFlags.visCenterViewDefault);
            app.ActiveWindow.Zoom = 1.2;
            app.ActiveWindow.Selection.DeselectAll();
            app.DoCmd((short)VisUICmds.visCmdDeselectAll);
    
            System.Windows.Forms.MessageBox.Show($"2 Shapes with text.", "Continue...");
    
            // reset the Text on Shape #2 and define 2 separate ranges
            s2.Text = "";
            // alocate a range 
            Characters range1 = s2.Characters;
            range1.Begin = 0;
            range1.End = 3;
            range1.Text = "Name";
            // alocate another
            Characters range2 = s2.Characters;
            range2.Begin = 4;
            //range2.End = 7;
            range2.Text = $"{Environment.NewLine}Type";
    
            MessageBox.Show($"Now change Font Size", "Continue...");
            // change font size or any of numerous properties 
            range1.CharProps[(short)Vis.VisCellIndices.visCharacterSize] = 16;
            range2.CharProps[(short)Vis.VisCellIndices.visCharacterSize] = 8;
            //range2.CharProps[(short)Vis.VisCellIndices.visCharacterStrikethru] = 1; // 1-true 0-false
    
            MessageBox.Show($"Big Name!{nl}little Type.", "OK to continue");
    
        } catch (Exception ex) {
            ta.LogIt($"Err {ex.Message} Trace {ex.StackTrace}");
        }
    
    }
    

    【讨论】:

      猜你喜欢
      • 2022-11-12
      • 2021-08-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-29
      • 1970-01-01
      • 1970-01-01
      • 2022-11-06
      相关资源
      最近更新 更多