gpt4 book ai didi

c# - 一个接收 PictureBox 和 String 的方法,两者都在里面定义,但最后 String 将为空

转载 作者:太空宇宙 更新时间:2023-11-03 22:46:57 25 4
gpt4 key购买 nike

我在一个类中有一个方法,它将接收一个 PictureBox 和一个 String,因此用户可以为 PictureBox 选择图像,同时让程序知道是什么文件以及所选文件的扩展名以备后用.

它将被设置的字符串,例如 1.png 但在我调用此方法的地方,字符串将被设置为 ""rly 不明白为什么会这样。

GerirDoc.cs 上,我在表单的开头将字符串定义为 String _imgFile = "" 并具有以下代码:

DocImg docImg = new DocImg();
docImg.selectImage(_imgFile, this.pictureBoxDoc);

DocImg 类

class DocImg
{

public int Hwnd { get; private set; }

public void selectImage(String imgFile, PictureBox imgBox)
{
OpenFileDialog openFileDialog = new OpenFileDialog();
openFileDialog.Title = "Escolher imagem";
openFileDialog.Filter = "Image files (*.jpg, *.jpeg, *.png) | *.jpg; *.jpeg; *.png";
openFileDialog.Multiselect = false;

if (openFileDialog.ShowDialog() == DialogResult.OK)
{
imgFile = openFileDialog.SafeFileName;
DialogResult dialogResult = MessageBox.Show("Deseja passar a imagem para o aparelho se tiver ligado ao computador?", "Informação", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
imgBox.Image = Image.FromFile(openFileDialog.FileName);
switch (dialogResult)
{
case DialogResult.Yes:
Shell shell = new Shell();
Folder folder = shell.BrowseForFolder((int)Hwnd, "Selecione o caminho para a pasta \"Imagens\"", 0, 0);
if (folder != null)
{
FolderItem _destinationDir = (folder as Folder3).Self;
if (String.Equals(_destinationDir.Name, "Imagens"))
{
try
{
folder.CopyHere(openFileDialog.FileName, null);
MessageBox.Show("Imagem guardada com sucesso", "Informação", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
}
else
{
MessageBox.Show("A pasta de destino tem que ser a pasta \"Imagens\" que se está dentro de adbRetail");
}
}
break;
case DialogResult.No:
MessageBox.Show("De lembrar que a imagem só ira aparecer correctamente se tiver na pasta correcta do aparelho", "Informação", MessageBoxButtons.OK, MessageBoxIcon.Information);
break;
}
}
}

我确实在 imgFile = openFileDialog.SafeFileName; 和变量 imgFile 之后放置了一个断点作为文件名的值,ex 1.png,但是在 GerirDoc.cs 上选择了图片,_imgFile 没有任何值(value)。

在 GerirDoc.cs 上,我只在创建表单时放置 _imgFile = ""。为什么会这样?因为我在其中发送了字符串,而且在 DocImg 中,如果用户选择了一个图像,它应该有文件名,ex 1.png 并且不能为空

最佳答案

据我了解,您需要更改局部变量的方法。您应该将其更改为:

public void selectImage(out string imgFile, PictureBox imgBox)

注意参数修饰符 out。然后像这样调用这个方法:

docImg.selectImage(out _imgFile, this.pictureBoxDoc);

out 关键字导致参数通过引用传递。它类似于 ref 关键字,除了 ref 要求在传递变量之前对其进行初始化。

更多引用:https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/out-parameter-modifier

关于c# - 一个接收 PictureBox 和 String 的方法,两者都在里面定义,但最后 String 将为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49405784/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com