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

メソッド内で変数を宣言すると、変数のスコープはそのメソッドになります。

そのメソッドの外部でもその変数を使用できるようにする場合は、次の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;
           }
       }
    }
于 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

このようにしてください -

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

ファイル名またはダイアログ オブジェクト自体を返すようにメソッドを変更するか、openfiledialog をメソッド外の別のプロパティに移動します。

于 2012-07-11T08:46:09.360 に答える
0

メソッド内で宣言された変数をそのメソッドの外で使用するにはどうすればよいですか?

できません。宣言をメソッドの外に移動できます。次に、それを含むクラスのフィールドになります。

しかし、他の多くの人が言っているように、この場合returnはファイル名の方が良いです.

refメソッドが外の世界に「公開」する唯一のものは、パラメーター (参照するオブジェクトを変更するか、またはの場合は割り当てる可能性がありますout) と戻り値です。

于 2012-07-11T09:33:30.773 に答える