[FIXED] C# Klicken Sie auf Ereignis, um den Dateidialog zu öffnen, Dateien in Photoshop zu starten und eine Aktion auszuführen

Ausgabe

Wieder kämpfe ich mit C#, nachdem ich von einer begrenzten vb.net-Wissensbasis komme.

Ich versuche, eine Schaltfläche in meiner Anwendung zu drücken, die einen Dateidialog öffnet und die ausgewählten Dateien in Photoshop öffnet und eine Aktion für sie ausführt.

In VB.net musste ich nur Folgendes tun …

 Private launchFiles As OpenFileDialog
Private Sub OpenInPS_btn_Click(sender As Object, e As EventArgs) Handles OpenInPS_btn.Click

    launchFiles = New OpenFileDialog
    launchFiles.Title = "Select files"
    launchFiles.CheckFileExists = True
    launchFiles.Multiselect = True
    launchFiles.RestoreDirectory = False
    Dim appRef
    appRef = CreateObject("Photoshop.Application")

    If launchFiles.ShowDialog = Windows.Forms.DialogResult.OK Then
        For Each fl In launchFiles.FileNames
            appRef.Open(fl)
            appRef.DoAction("JDE Brandstore", "Render to Brandstore V3")
    End If

End Sub

Wenn ich jedoch versuche, dies so in C # zu konvertieren …

 private OpenFileDialog launchFiles;


    private void BTN_Photoshop_Click(object sender, EventArgs e)
    {
        launchFiles = new OpenFileDialog();
        launchFiles.Title = "Select files";
        launchFiles.CheckFileExists = true;
        launchFiles.Multiselect = true;
        launchFiles.RestoreDirectory = false;
        object appRef;
        appRef = CreateObject("Photoshop.Application");
        if (launchFiles.ShowDialog == Forms.DialogResult.OK)
        {
            foreach (var fl in launchFiles.FileNames)
            {
                appRef.Open(fl);
                appRef.DoAction("Job1", "CropperSpec");
            }
        }
    }

Ich habe eine ganze Reihe von Fehlern, die ich derzeit nicht verstehe bzw. weiß, wie ich sie beheben kann.
Geben Sie hier die Bildbeschreibung ein

Würde jemand zufällig wissen, wo ich falsch liege und vielleicht (hier kommt die freche Bitte …) einen funktionierenden Codeblock für mich mit einer Erklärung dafür bereitstellen, wo ich falsch gelaufen bin und was Ihr Code tut, damit es funktioniert.

—Aktualisieren—

Danke für die Hilfe @Mat J

Die neue Codeversion hier startet jetzt Photoshop, aber ich kann damit keine Dokumente öffnen.

 private OpenFileDialog launchFiles;


    private void BTN_Photoshop_Click(object sender, EventArgs e)
    {
        launchFiles = new OpenFileDialog();
        launchFiles.Title = "Select files";
        launchFiles.CheckFileExists = true;
        launchFiles.Multiselect = true;
        launchFiles.RestoreDirectory = false;

        Type PhotoshopType = Type.GetTypeFromProgID("Photoshop.Application");
        object PhotoshopInst = Activator.CreateInstance(PhotoshopType);
        PhotoshopType.InvokeMember("Visible", BindingFlags.SetProperty, null, PhotoshopInst, new object[1] { true });
        if (launchFiles.ShowDialog() == DialogResult.OK)
        {
            foreach (var fl in launchFiles.FileNames)
            {
                PhotoshopType.open(fl);
            }
        }
    }

Geben Sie hier die Bildbeschreibung ein
Vielen Dank

Lösung

Vorausgesetzt, Sie verwenden .NET 4 oder höher, können Sie Folgendes deklarieren PhotoshopInst:dynamic

dynamic PhotoshopInst = Activator.CreateInstance(PhotoshopType);

Dann können Sie Methoden aufrufen, von denen Sie wissen, dass der zugrunde liegende Typ unterstützt wird, ohne dass sich der Compiler beschwert.

PhotoshopInst.Open(fl);


Beantwortet von –
thabs


Antwort geprüft von –
Marilyn (FixError Volunteer)

0 Shares:
Leave a Reply

Your email address will not be published. Required fields are marked *

You May Also Like