How do I use a variable declared in a method, outside that method?

和自甴很熟 提交于 2021-02-17 02:46:29

问题


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

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!