C# 单击事件打开文件对话框,在photoshop中启动文件并运行操作
我又一次发现自己在有限的vb.net知识库中与C#作斗争 我试图按下应用程序上的一个按钮,打开一个文件对话框,在photoshop中打开所选文件并对其运行操作 在VB.net中,我所要做的就是如下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
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
。代码在原始帖子中更新