0

さて、私は今いくつかの if/else ステートメントを扱っています。しかし、私はいくつかの問題を抱えています。

クリックしたバージョンに応じた完全なコードを次に示します。

private void button_Click(object sender, EventArgs e)
{
    using (OpenFileDialog file = new OpenFileDialog())
    {
        file.Filter = "File(*.file)|*.jar|All Files (*.*)|*.*";
        file.Title = "Open File...";
        if (file.ShowDialog() == DialogResult.OK)
        {
            string fullFileName = item.FileName;
            FileInfo userSelected = new FileInfo(fullFileName);
            string fileNameWithExt = Path.GetFileName(fullFileName);
            string destPath = Path.Combine(Application.UserAppDataPath, fileNameWithExt);
            string mcAD = Environment.ExpandEnvironmentVariables("%AppData%");
            File.Copy(item.FileName, mcAD, true);
        }
    }

しかし、私が問題を抱えているのはこれです。以下はコードですが、プログラムのレイアウトは次のとおりです。プログラムの下部にメニューがあります。クリックすると「バージョン」という名前が付けられ、バージョン 1.0、2.0、および 3.0 を選択できます。設定したので、選択したバージョンを示すテキストが横に表示されます。ここで、問題は、上記のコードのすべてのバージョンに if/else ステートメントが必要であるため、各バージョンのすべてのファイルが別の場所に移動することです。

これが他のコードです...

private void Version_1_0_Click(object sender, EventArgs e)
{
    string Version_1_0_Selected = VersionText.Text = "1.0 Selected";
}

private void Version_1_6_1_Click(object sender, EventArgs e)
{
    string Version_2_0_Selected = VersionText.Text = "2.0 Selected";
}

private void Version_3_0_Click(object sender, EventArgs e)
{
    string Version_3_0_Selected = VersionText.Text = "3.0 Selected";
}
4

2 に答える 2

1

バージョン インデックスを格納するために Control.Tag を使用できます。例えば:

private void Version_1_0_Click(object sender, EventArgs e)
{
  VersionText.Text = "1.0 Selected";
  VersionText.Tag= 1;
}

次に、ターゲット パスを定義できます。

string[] paths = {@"c:\path1.txt", @"c:\path2.txt", @"c:\path3.txt"};

最後に、ファイルを書き込むときに、次のようにパスを検索できます。

File.Copy(item.FileName, paths[VersionText.Tag], true);

ターゲット ファイル名がソース ファイル名に基づいている場合、このコードを変更する必要があるかもしれませんが、それは難しいことではありません。

于 2013-07-31T01:28:21.513 に答える
1

FileDialog コードを別のメソッドに抽象化し、バージョン文字列を渡して、チェックを実行できるようにします。

public void OpenVersionDialog(string version)
{
     string mcAD = GetCopyPath(version);
     if(!String.IsNullOrEmpty(mcAD))
     {
        using (OpenFileDialog file = new OpenFileDialog())
        {
            file.Filter = "File(*.file)|*.jar|All Files (*.*)|*.*";
            file.Title = "Open File...";
            if (file.ShowDialog() == DialogResult.OK)
            {
               string fullFileName = item.FileName;
               FileInfo userSelected = new FileInfo(fullFileName);
               string fileNameWithExt = Path.GetFileName(fullFileName);
               string destPath = Path.Combine(Application.UserAppDataPath, fileNameWithExt);


               File.Copy(item.FileName, mcAD, true);
            }
        }
     }
     else
     {
        //invalid version selected
     } 
}


public string GetCopyPath(string versionInput)
{
   //these are case-insensitive checks but you can change that if you want case-sensitive
   if(string.Equals(versionInput, "1.0 Selected", StringComparison.OrdinalIgnoreCase))
      return "YOUR_PATH_FOR 1.0";

  if(string.Equals(versionInput, "2.0 Selected", StringComparison.OrdinalIgnoreCase))
      return "YOUR_PATH_FOR 2.0";

   if(string.Equals(versionInput, "3.0 Selected", StringComparison.OrdinalIgnoreCase))
      return "YOUR_PATH_FOR 3.0";

   return String.Empty;
}

私が正しく理解しているなら、それはあなたが望むものでなければなりません。より多くのバージョンがある場合は、キーがバージョンで、値がファイルのコピー先のパスであるディクショナリにそれらを保存できます。

mcADとの違いが何であるかはわかりませんdestPathmcAD、で使用されているバージョンに基づいて変化する変数であると思いますFile.Copy

于 2013-07-31T01:21:23.943 に答える