问题
I am using VS 2008 (C#)... I have created a function in a GlobalClass to use it globally.. This is for opening a dialog box. When I call this function in my method it works but I am not able to use the Object "OFD" that I have created here...
static class GlobalClass
{
public static void OFDbutton()
{
OpenFileDialog ofd = new OpenFileDialog();
ofd.Filter = "Image files|*.jpg;*.jpeg;*.png;*.gif";
DialogResult dr = ofd.ShowDialog();
}
}
In the form method. I am using
globalclass.ofdbutton(); //Calling the function
lable1.text=ofd.filename;
I want to use object "ofd" but I am unable to do so.. What I have to do about this, please help
回答1:
I guess what you want is
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;
}
}
which gives back the OpenFileDialog
object. Now you can
OpenFileDialog ofd = globalclass.ofdbutton(); //Calling the function
label1.text=ofd.filename;
回答2:
You might want to rework your method to actually return the filename instead.
Something like
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;
}
Of course, this is a very naive approach, and you might want to read up on variable scope and object oriented design in general.
Edit: This answer expands on the issue and improves the design, taking into account that the user may have clicked cancel in the dialog itself.
Edit2: Shamelessly copying from the linked answer, I modify my own snippet.
回答3:
When you declare a variable inside a method, then the variable is scoped to that method.
if you want to be able to use that variable outside that method as well, you'll have two options:
Return the variable:
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;
}
}
}
or make an out parameter for that variable (which I'd certainly not prefer in this case)
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;
}
}
}
回答4:
Either change the method to return the filename or the dialog object itself Or move the openfiledialog into an seperate property outside the method
回答5:
Do it like this -
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();
回答6:
How do I use a variable declared in a method, outside that method?
You can't. You can move the declaration to outside the method. Then it becomes a field of the containing class.
But as many others have said, in this case it's better to return
the filename.
The only things a method "exhibits" to the outside world, are the parameters (it might mutate the objects they reference; or assign to them if they're ref
or out
) and the return value.
来源:https://stackoverflow.com/questions/11428701/how-do-i-use-a-variable-declared-in-a-method-outside-that-method