如何在方法之外使用方法中声明的变量?

时间:2012-07-11 08:40:08

标签: c# class object scope

我正在使用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”但我无法这样做..我需要做些什么,请帮助

6 个答案:

答案 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文件名最好。

方法“展示”外部世界的唯一内容是参数(它可能会改变它们引用的对象;如果它们是refout则分配给它们)和返回值。