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
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.
Either change the method to return the filename or the dialog object itself Or move the openfiledialog into an seperate property outside the method
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;
}
}
}
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();
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;
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.