我正在使用VS 2008(C#)...我在GlobalClass中创建了一个全局使用它的函数。这是用于打开一个对话框。当我在我的方法中调用此函数时它可以工作,但我无法使用我在这里创建的对象“OFD”......
static class GlobalClass
{
public static void OFDbutton()
{
OpenFileDialog ofd = new OpenFileDialog();
ofd.Filter = "Image files|*.jpg;*.jpeg;*.png;*.gif";
DialogResult dr = ofd.ShowDialog();
}
}
在表单方法中。我正在使用
globalclass.ofdbutton(); //Calling the function
lable1.text=ofd.filename;
我想使用对象“ofd”但我无法这样做..我需要做些什么,请帮助
答案 0 :(得分:4)
您可能希望重新设计方法以实际返回文件名。
像
这样的东西public static string OFDbutton()
{
OpenFileDialog ofd = new OpenFileDialog();
ofd.Filter = "Image files|*.jpg;*.jpeg;*.png;*.gif";
if (ofd.ShowDialog() == DialogResult.OK)
return ofd.Filename;
else
return string.Empty;
}
当然,这是一种非常天真的方法,您可能希望一般性地阅读变量范围和面向对象的设计。
编辑:This answer扩展了问题并改进了设计,考虑到用户可能在对话框中点击了取消。
Edit2:从链接的答案中无耻地复制,我修改了自己的代码片段。
答案 1 :(得分:2)
在方法中声明变量时,该变量的作用域为该方法。
如果您希望能够在该方法之外使用该变量,您将有两个选择:
返回变量:
public static string OFDMethod()
{
using( var ofd = new OpenFileDialog() )
{
ofd.Filter = "Image files|*.jpg;*.jpeg;*.png;*.gif";
if( ofd.ShowDialog() == DialogResult.OK )
{
return ofd.Filename;
}
else
{
return string.Empty;
}
}
}
或为该变量制作一个out参数(在这种情况下我肯定不喜欢)
public static void OFDMethod(out string selectedFilename)
{
using( var ofd = new OpenFileDialog() )
{
ofd.Filter = "Image files|*.jpg;*.jpeg;*.png;*.gif";
if( ofd.ShowDialog() == DialogResult.OK )
{
selectedFilename = ofd.Filename;
}
else
{
selectedFilename = string.Empty;
}
}
}
答案 2 :(得分:1)
我想你想要的是
static class GlobalClass
{
public static OpenFileDialog OFDbutton()
{
OpenFileDialog ofd = new OpenFileDialog();
ofd.Filter = "Image files|*.jpg;*.jpeg;*.png;*.gif";
DialogResult dr = ofd.ShowDialog();
return ofd;
}
}
返回OpenFileDialog
个对象。现在你可以
OpenFileDialog ofd = globalclass.ofdbutton(); //Calling the function
label1.text=ofd.filename;
答案 3 :(得分:0)
更改方法以返回文件名或对话框对象本身 或者将openfiledialog移动到方法
之外的单独属性中答案 4 :(得分:0)
这样做 -
static class GlobalClass
{
public static string OFDbutton()
{
OpenFileDialog ofd = new OpenFileDialog();
ofd.Filter = "Image files|*.jpg;*.jpeg;*.png;*.gif";
DialogResult dr = ofd.ShowDialog();
return ofd.FileName;
}
}
lable1.text = GlobalClass.OFDbutton();
答案 5 :(得分:0)
如何在该方法之外使用方法中声明的变量?
你做不到。您可以将声明移动到方法之外。然后它成为包含类的字段。
但正如其他许多人所说,在这种情况下,return
文件名最好。
方法“展示”外部世界的唯一内容是参数(它可能会改变它们引用的对象;如果它们是ref
或out
则分配给它们)和返回值。