2016-11-20 3 views
0

今はコンボボックスの選択に基づいてピクチャボックス内の画像を変更するプログラムを作成しています。どのようにすればいいのですか?しかし、これをエクスポートして友達に送信したいのであれば、私が働く唯一の方法は正確なファイル名(私のユーザーディレクトリを含む)を使用することなので動作しません。 Resourceフォルダにあるすべてのリソースにもかかわらず、ファイル名を指定すると、FileNotFoundExceptionが返されます。Image.FromFileに自分のアプリケーションフォルダを使用させるにはどうすればいいですか?

私はプログラミングには新しく、具体的な指示は非常に高く評価されます。

public Form1() 
    { 

     InitializeComponent(); 


     MapList(); 
    } 

    public void MapList() 
    { 
     cBox.Items.Add(
      new Map() {Name= "Cache" , 
       Image = @"C:\Users\Pampperin\Desktop\Videos\Coding\Projects\CSGO Audio Help\MinimapSoundDisplay\MinimapSoundDisplay\Resources\de_cache_radar.png" 
      }); 
     cBox.Items.Add(
      new Map() 
      { 
       Name = "Cobblestone", 
       Image = @"C:\Users\Pampperin\Desktop\Videos\Coding\Projects\CSGO Audio Help\MinimapSoundDisplay\MinimapSoundDisplay\Resources\de_cbble_radar.png" 
      }); 
     cBox.Items.Add(
      new Map() 
      { 
       Name = "Dust2", 
       Image = @"C:\Users\Pampperin\Desktop\Videos\Coding\Projects\CSGO Audio Help\MinimapSoundDisplay\MinimapSoundDisplay\Resources\de_dust2_radar.png" 
      }); 
     cBox.Items.Add(
      new Map() 
      { 
       Name = "Inferno", 
       Image = @"C:\Users\Pampperin\Desktop\Videos\Coding\Projects\CSGO Audio Help\MinimapSoundDisplay\MinimapSoundDisplay\Resources\de_inferno_radar.png" 
      }); 
     cBox.Items.Add(
      new Map() 
      { 
       Name = "Mirage", 
       Image = @"C:\Users\Pampperin\Desktop\Videos\Coding\Projects\CSGO Audio Help\MinimapSoundDisplay\MinimapSoundDisplay\Resources\de_mirage_radar.png" 
      }); 
     cBox.Items.Add(
      new Map() 
      { 
       Name = "Nuke", 
       Image = @"C:\Users\Pampperin\Desktop\Videos\Coding\Projects\CSGO Audio Help\MinimapSoundDisplay\MinimapSoundDisplay\Resources\de_nuke_radar.png" 
      }); 
     cBox.Items.Add(
      new Map() 
      { 
       Name = "Overpass", 
       Image = "Resources.de_overpass_radar.png" 
      }); 
    } 


    private void cBox_SelectedIndexChanged(object sender, EventArgs e) 
    { 
     if (cBox.SelectedIndex > -1) 
     { 
      var imageName = ((Map)cBox.SelectedItem).Image; 
      var file = System.IO.Path.Combine(Application.StartupPath, "Resources", imageName); 
      pictureBox.Image = Image.FromFile(file); 
     } 
    } 

とマップのクラス

public class Map 
{ 
    public string Name { get; set; } 
    public string Image { get; set; } 
    public override string ToString() 
    { 
     return this.Name; 
    } 
} 
+2

埋め込みリソース –

+0

ストアとしてそれらのイメージ 'ユーザ...'フォルダまたは多分 'プログラムData'内のファイル - そのほとんど彼らが存在する理由。あなたはまた、前のイメージを(もしあれば)廃棄する必要があります - それを作成する場合は、それを処分する必要があります – Plutonix

答えて

0

これは、あなたのアプリケーションのパスを与える:

string apppath = Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location); 

私がテストしていないが、代替的に、これはリフレクションを使用してからあなたを保つために(動作するはずです):

string apppath = System.IO.Path.GetDirectoryName(System.Windows.Forms.Application.ExecutablePath); 

NDその後、次のようなファイル名を設定することができるはずです。

Image = System.IO.Path.Combine(apppath, "de_cache_radar.png"); 
+0

魅力のように働いて、感謝:) – Dinoswarleafs

関連する問題