2016-08-21 2 views
1

私のWindowsアプリケーションにはListViewがあります。このListViewの各項目にはいくつかのSubItemがあり、そのうちの1つは画像へのファイルパスを格納するために使用されます。OpenFileDialogで文字列としてファイルパスを正しくフォーマットするには?

ListViewの項目が選択されると、PictureBox内の画像は次のコードで更新されます。

private void listView1_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    //check that only one item is selected 
    if (listView1.SelectedItems.Count == 1) 
    { 
     //update the image from the filepath in the SubItem 
     pictureBox1.Image = Image.FromFile(listView1.SelectedItems[0].SubItems[1].Text); 
    } 
} 

これはすべて正常に動作します。ただし、PictureBoxをクリックすると、OpenFileDialogが開き、ユーザーは画像を選択できます。次に、ListView内の現在選択されている項目のSubItem.Textを画像のファイルパスに変更します。ファイルパスがChosen_Fileに割り当てられたとき

private void pictureBox1_Click(object sender, EventArgs e) 
{ 
    //open a file dialog to chose an image and assign to the SubItem of the selected item 
    openFileDialog1.ShowDialog(); 
    openFileDialog1.FileName = ""; 
    string Chosen_File = ""; 
    Chosen_File = openFileDialog1.FileName; 
    listView1.SelectedItems[0].SubItems[1].Text = Chosen_File; 
} 

しかし、それは私が項目を選択したときに、私はArgumentExceptionがを得ることを意味し、正しくフォーマットされていません。

なぜファイルパスが正しくフォーマットされていないのですか?また、ファイルパスをChosen_Fileに割り当てるときにどうすればよいですか?

+2

にキャンセルボタンを選択するユーザーを処理する必要がないようにあなたのコードを変更する必要がありますIE openFileDialog1.FileName = "")あなたのコードは期待どおりに動作します – Steve

+1

また、temp var 'listView1.SelectedItems [0] .SubItems [1] .Text = openFileDialog1.FileName;で結果をスコープする必要はありません。 – Plutonix

+0

@Plutonixそれを修正します。 –

答えて

2

あなたはOpenFileDialogから選択範囲を削除し、また、(あなたがOpenFileDIalog選択をキャンセルする行を削除する場合は、おそらくダイアログ

private void pictureBox1_Click(object sender, EventArgs e) 
{ 
    // Enter the assignment code only if user presses OK 
    if(DialogResult.OK == openFileDialog1.ShowDialog()) 
    { 
     // This is you error 
     // openFileDialog1.FileName = ""; 
     string Chosen_File = openFileDialog1.FileName; 
     listView1.SelectedItems[0].SubItems[1].Text = Chosen_File; 
    } 
} 
+0

完璧に作業しました。また、キャンセルのユーザーを処理するように私に思い出させるためにありがとう、私はおそらくそれにラウンドを獲得したことはないでしょう。 –

関連する問題