Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 单击事件打开文件对话框,在photoshop中启动文件并运行操作_C#_Photoshop_Launching Application - Fatal编程技术网

C# 单击事件打开文件对话框,在photoshop中启动文件并运行操作

C# 单击事件打开文件对话框,在photoshop中启动文件并运行操作,c#,photoshop,launching-application,C#,Photoshop,Launching Application,我又一次发现自己在有限的vb.net知识库中与C#作斗争 我试图按下应用程序上的一个按钮,打开一个文件对话框,在photoshop中打开所选文件并对其运行操作 在VB.net中,我所要做的就是如下 Private launchFiles As OpenFileDialog Private Sub OpenInPS_btn_Click(sender As Object, e As EventArgs) Handles OpenInPS_btn.Click launchFiles = N

我又一次发现自己在有限的vb.net知识库中与C#作斗争

我试图按下应用程序上的一个按钮,打开一个文件对话框,在photoshop中打开所选文件并对其运行操作

在VB.net中,我所要做的就是如下

 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
然而,当我试图将其转换为C#时,就像这样

 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");
            }
        }
    }
我有一大堆错误,我目前不理解/不知道如何解决。

是否有人碰巧知道我出了什么问题,也许(这是一个厚颜无耻的请求…)会为我提供一个工作代码块,解释我出了什么问题,以及您的代码是如何工作的

---更新---

谢谢你的帮助@Mat J

新版本的代码现在启动了Photoshop,但我无法让它打开任何文档

 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);
            }
        }
    }

非常感谢

如果您使用.NET 4或更高版本,您可以将
PhotoshopInst
声明为
dynamic

dynamic PhotoshopInst = Activator.CreateInstance(PhotoshopType);
然后,您将能够调用底层类型支持的方法,而无需编译器抱怨

PhotoshopInst.Open(fl);

将帮助您开始搜索什么以及如何进行搜索。要点是有些东西只能用一种语言使用,有时你无法轻松地将其直接翻译成另一种语言。多亏了这个Mat,该函数现在已经运行了。只需要知道如何访问PS foreach中的命令(launchFiles.FileNames中的var fl){appRef.Open(fl);appRef.DoAction(“Job1”,“CropperSpec”);}会出现错误,因为“对象不包含定义”,您可以更新问题中的代码吗?就像@MatJ states链接的问题一样,您必须将您的
appRef
声明为
dynamic
,而不是
object
,或者使用调用方法
Open
DoAction
。代码在原始帖子中更新