1

我正在使用 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”,但我不能这样做..我该怎么做,请帮忙

4

6 回答 6

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;
}

当然,这是一种非常幼稚的方法,您可能想要阅读一般的变量范围和面向对象设计。

编辑:考虑到用户可能在对话框本身中单击了取消,此答案扩展了该问题并改进了设计。

Edit2:从链接的答案中无耻地复制,我修改了自己的片段。

于 2012-07-11T08:42:50.127 回答
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;
           }
       }
    }

或为该变量制作一个输出参数(在这种情况下我当然不喜欢)

    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;
           }
       }
    }
于 2012-07-11T08:45:28.223 回答
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;
于 2012-07-11T08:45:17.283 回答
0

更改方法以返回文件名或对话框对象本身或将 openfiledialog 移动到方法外部的单独属性中

于 2012-07-11T08:46:09.360 回答
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();
于 2012-07-11T08:46:20.473 回答
0

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

你不能。您可以将声明移到方法之外。然后它成为包含类的一个字段

但正如许多其他人所说,在这种情况下,文件名更好return

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

于 2012-07-11T09:33:30.773 回答