因此可以看到,可以通過該屬性的設置,來實現組合形狀的分離操作,在圖紙上實際操作一下,把0修改為1或者2,果然可以實現子形狀的選擇操作了。
建立一個操作函數,來實現選擇模式的修改,如下所示:
/// <summary>
/// 設置形狀的選擇屬性
/// </summary>
/// <param name="targetShape">指定的形狀</param>
/// <param name="selectMode">
/// 0 僅選擇組合形狀。
/// 1 首先選擇組合形狀
/// 2 首先選擇組合的組成部分
/// </param>
[CLSCompliant(false)]
public static void SetGroupSelectMode(Visio.Shape targetShape, int selectMode)
{
targetShape.get_CellsSRC((short)VisSectionIndices.visSectionObject, (short)VisRowIndices.visRowGroup,
(short)VisCellIndices.visGroupSelectMode).FormulaU = selectMode.ToString();
}
本人實現了圖形變化效果,截取項目部分代碼,作為分析研究之用,如下所示:
else if (equipType == "4/2閥")
{
VisioUtility.SetGroupSelectMode(shape, 2);//改變模式,使之可以選擇子形狀
#region MyRegion
foreach (Shape subShape in shape.Shapes)
{
string subEquipType = VisioUtility.GetShapeCellValue(subShape, "設備類型");
if (subEquipType == "閥A" || subEquipType == "閥B")
{
subShape.Text = subEquipType;
if (intValue != 0)
{
continue;
}
try
{
VisWindow.DeselectAll();
VisWindow.Select(subShape, (short)VisSelectArgs.visSubSelect);
if (subEquipType == "閥A")
{
VisWindow.Selection.Move(0.393701, 0, "inches");//移動到右邊
}
else if (subEquipType == "閥B")
{
VisWindow.Selection.Move(-0.393701, -0, "inches");//移動到左邊
}
System.Windows.Forms.Application.DoEvents();
Thread.Sleep(50);
}
catch (Exception ex)
{
VisWindow.DeselectAll();
}
}
}
VisioUtility.SetGroupSelectMode(shape, 0);//還原選擇模式,成為組合形狀
#endregion
}
世界本簡單,只因道未知;無師可自通,碼界無秘密。
主要研究技術:代碼生成工具、Visio二次開發、送水管理軟件等共享軟件開發