2016-08-21 5 views
1

내 Windows 응용 프로그램에는 ListView가 있습니다. 이 ListView의 각 항목에는 일부 SubItem이 있으며, 그 중 하나는 이미지 경로에 파일 경로를 저장하는 데 사용됩니다.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

또한 임시 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

완벽하게 일했습니다. 또한 취소하는 사용자를 처리하도록 상기시켜 주셔서 감사합니다. –

관련 문제