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

后端 未结 6 1441
眼角桃花
眼角桃花 2021-01-27 00:26

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

相关标签:
6条回答
  • 2021-01-27 00:53

    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.

    0 讨论(0)
  • 2021-01-27 01:00

    Either change the method to return the filename or the dialog object itself Or move the openfiledialog into an seperate property outside the method

    0 讨论(0)
  • 2021-01-27 01:01

    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;
               }
           }
        }
    
    0 讨论(0)
  • 2021-01-27 01:04

    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();
    
    0 讨论(0)
  • 2021-01-27 01:07

    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;
    
    0 讨论(0)
  • 2021-01-27 01:13

    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.

    0 讨论(0)
提交回复
热议问题