NoTextEdit ShapeLock не работает - Открыть XML SDK - PullRequest
1 голос
/ 14 января 2020

Я пытаюсь заблокировать TextBox с помощью Open XML SDK. Я пробовал этот метод, но TextBox NoTextEdit не работает.

public DocumentFormat.OpenXml.Presentation.Shape GenerateShape(string StrText)
{
    DocumentFormat.OpenXml.Presentation.Shape shape1 = new DocumentFormat.OpenXml.Presentation.Shape();

    DocumentFormat.OpenXml.Presentation.NonVisualShapeProperties nonVisualShapeProperties1 = new DocumentFormat.OpenXml.Presentation.NonVisualShapeProperties();
    DocumentFormat.OpenXml.Presentation.NonVisualDrawingProperties nonVisualDrawingProperties1 = new DocumentFormat.OpenXml.Presentation.NonVisualDrawingProperties() { Id = (UInt32Value)3U, Name = "ID",Hidden=true ,Description="Do not Remove" ,MCAttributes=null };

    DocumentFormat.OpenXml.Presentation.NonVisualShapeDrawingProperties nonVisualShapeDrawingProperties1 = new DocumentFormat.OpenXml.Presentation.NonVisualShapeDrawingProperties();
    Drawing.ShapeLocks shapeLocks1 = new Drawing.ShapeLocks() { NoTextEdit = true, NoGrouping = true,NoMove=true,NoSelection=true,NoEditPoints=true ,NoAdjustHandles=true ,NoRotation=true,NoChangeArrowheads=true,NoChangeAspect=true,NoChangeShapeType=true,NoResize=true};

    nonVisualShapeDrawingProperties1.Append(shapeLocks1);

    ApplicationNonVisualDrawingProperties applicationNonVisualDrawingProperties1 = new ApplicationNonVisualDrawingProperties();
    PlaceholderShape placeholderShape1 = new PlaceholderShape() { Type = PlaceholderValues.SubTitle, Index = (UInt32Value)1U   };

    applicationNonVisualDrawingProperties1.Append(placeholderShape1);

    nonVisualShapeProperties1.Append(nonVisualDrawingProperties1);
    nonVisualShapeProperties1.Append(nonVisualShapeDrawingProperties1);
    nonVisualShapeProperties1.Append(applicationNonVisualDrawingProperties1);
    DocumentFormat.OpenXml.Presentation.ShapeProperties shapeProperties1 = new DocumentFormat.OpenXml.Presentation.ShapeProperties();

    DocumentFormat.OpenXml.Presentation.TextBody textBody1 = new DocumentFormat.OpenXml.Presentation.TextBody();
    Drawing.BodyProperties bodyProperties1 = new Drawing.BodyProperties();
    Drawing.ListStyle listStyle1 = new Drawing.ListStyle();
    Drawing.TextShape shp = new Drawing.TextShape();

    Drawing.Paragraph paragraph1 = new Drawing.Paragraph();
    Drawing.EndParagraphRunProperties endParagraphRunProperties1 = new Drawing.EndParagraphRunProperties() { Language = "en-US" ,Dirty=false };
    paragraph1.Append(GenerateRun(StrText));
    paragraph1.Append(endParagraphRunProperties1);

    textBody1.Append(bodyProperties1);
    textBody1.Append(listStyle1);
    textBody1.Append(paragraph1);

    shape1.Append(nonVisualShapeProperties1);
    shape1.Append(shapeProperties1);
    shape1.Append(textBody1);
    return shape1;
}
public Drawing.Run GenerateRun(string StrText)
{

    Drawing.Run run1 = new Drawing.Run();

    Drawing.RunProperties runProperties1 = new Drawing.RunProperties() { Language = "en-US", Dirty = false  };
    runProperties1.SetAttribute(new OpenXmlAttribute("", "smtClean", "", "0"));
    Drawing.Text text1 = new Drawing.Text();
    text1.Text = StrText;
    Drawing.SolidFill solidFill2 = new Drawing.SolidFill();
    Drawing.SchemeColor schemeColor = new Drawing.SchemeColor();

    string y = System.Drawing.Color.Transparent.ToArgb().ToString("X");
    Drawing.RgbColorModelHex rgbColorModelHex2 = new Drawing.RgbColorModelHex() { Val = "FFFFFF" };//Set Font-Color to Blue (Hex "0070C0").

    solidFill2.Append(rgbColorModelHex2);
    runProperties1.Append(solidFill2);


    Color color = new Color() { Val = "365F91", ThemeColor = ThemeColorValues.Accent1, ThemeShade = "BF" };
    run1.Append(runProperties1);
    run1.Append(text1);

    return run1;

}

Все отлично работает, кроме редактирования. Тем не менее пользователь может редактировать значения TextBox, дважды щелкнув по нему . Как я могу избежать этого?

Есть ли какое-либо постоянное решение для предотвращения редактирования? Пожалуйста, помогите мне найти лучшее решение.

Заранее спасибо

1 Ответ

1 голос
/ 20 января 2020

Исследуя и общаясь с командой MVP, я указал, что нет способа защитить TextBox от редактирования. Как указано в комментариях Синди Мейстер ,

Можете ли вы сделать это в пользовательском интерфейсе приложения PowerPoint? Если нет, то Open XML не может сделать это ... Если да, вы можете.

Если вы не хотите, чтобы текст был изменен, просто измените его как изображение, а затем заблокируйте его, используя NoSelection=true/1 и NoMove=true/1 свойства. Если вы включите эти свойства, пользователь не сможет ни удалить, ни изменить свою позицию.

Для вашего ref: https://answers.microsoft.com/en-us/msoffice/forum/msoffice_powerpoint-mso_windows8-mso_2016/shape-lock-is-not-working/c1705b55-d2aa-4adb-b538-574ed2fc8eca?tm=1579265435636&page=1&rtAction=1579495439869

...