2011-12-28 3 views
0

이 사이트의 이전 게시물과 유사하지만 계속 오류 메시지가 표시됩니다. 대화 상자를 열고 나중에 읽을 텍스트 파일을 저장하는 C# WPF에서 단추를 만들고 싶습니다. 이 코드는 Windows 32에서는 작동하지만 Windows 64에서는 충돌이 발생합니다.이 코드를 변경하여 두 시스템에서 모두 작동되게하려면 어떻게해야합니까? 나는 프로그래밍 초보자이다.WPF DialogBox 저장 (Windows 64)

Microsoft.Win32.SaveFileDialog saveFile = new Microsoft.Win32.SaveFileDialog(); //throws error message here 

    private void savebutton_Click(object sender, RoutedEventArgs e) 
    { 
     saveFile.FileName = Class1.stringjobnum; 
     saveFile.Filter = "CCurtain (*.cur)|*.cur"; 
     saveFile.FilterIndex = 2; 
     saveFile.InitialDirectory = "T:\\Tank Baffle Curtain Calculator\\SavedTanks"; 
     saveFile.OverwritePrompt = true; 

     bool? result = saveFile.ShowDialog(); 

     if (result.HasValue && result.Value) 
     { 
      clsSaveFile.s_FilePath = saveFile.FileName; 
      int iDotLoc = clsSaveFile.s_FilePath.LastIndexOf('.'); 


      string strExtTest = clsSaveFile.s_FilePath.Substring(iDotLoc); 
      if (strExtTest != ".cur") 
       clsSaveFile.s_FilePath += ".cur"; 
      FileInfo sourceFile = new FileInfo(clsSaveFile.s_FilePath); 
      clsSaveFile.saveFile(); 
     } 
    } 
+1

System.Windows.Forms 대신 Microsoft.Win32를 사용하는 이유가 있습니까? – djdanlib

+0

오류 메시지는 무엇입니까? – decyclone

+0

생성자에서 SaveFileDialog를 충돌 시키면 컴퓨터가 꽤 골랐다는 것을 나타냅니다. superuser.com에 게시하여 안정적인 방법을 다시 요청하십시오. –

답변

0

잘못된 FilterIndex를 설정하고 있습니다.이 필터는 무언가 관련이있을 수 있습니다.

작성된 필터 문자열에는 2 필터가 없습니다 :

"CCurtain (*.cur)|*.cur" 

1로 FilterIndex를 설정하거나 문자열에 다른 필터를 추가하십시오.

+0

FilterIndex를 1로 변경했습니다. 여전히 충돌합니다. – user1119958

0

어떤 일이 벌어지고 있는지 더 잘 알기 위해 문장 주위에 캐치를 추가해야합니다.

try 
{ 
    code here 
} 
catch (Exception ex) 
{ 
    ex.message contains the info 
} 

또한, 널 (null) 확인 :

bool? result = saveFile.ShowDialog(); 

if (result != null && (result.HasValue && result.Value)) 
{ 
// code 
} 
+1

나는 당신이 말한 것을했고 그것은 다소 도움이되었습니다. 나는 그것이 IF 문 안쪽 어딘가에서 실패하고 있다는 것을 알고있다. 나는 그것을 더 이상 무너 뜨릴 수 없었다. – user1119958

+0

두 문장의 if 문은 어느 것입니까? 예외 메시지를 게시 할 수 있습니까? – JeremyK

+0

null 가능 bool이 null로 설정된 경우 if 문은 bool의 멤버를 검사 할 때 if 문이 충돌합니다. null가 아무것도하지 않는 경우는 최초로 null를 체크해주세요. 나는 나의 대답을 업데이트했다. – JeremyK

0

내가 이벤트에서 대화 상자를 만들 것입니다. 그리고 두 가지 필터가 없습니다.

private void savebutton_Click(object sender, RoutedEventArgs e) 
    { 
     Microsoft.Win32.SaveFileDialog saveFile = new Microsoft.Win32.SaveFileDialog(); 
     saveFile.FileName = Class1.stringjobnum; 
     saveFile.Filter = "CCurtain|*.cur";; 
     saveFile.FilterIndex = 1; 
     saveFile.InitialDirectory = "T:\\Tank Baffle Curtain Calculator\\SavedTanks"; 
     saveFile.OverwritePrompt = true; 

     // Show open file dialog box 
     Nullable<bool> result = saveFile.ShowDialog(); 

     // Process open file dialog box results 
     if (result == true) 
     { 
      string filename = saveFile.FileName; 
      // are you sure you need to check the extension. 
      // if so extension is a a fileinfo property 
     } 
+0

내가 준 코드를 복사하여 붙여 넣습니다. dlg.ShowDialog(); 오류가 발생했습니다. saveFile.ShowDialog();로 변경했습니다. 그건 아마 내 실수 였어. 그래도 위의 코드와 똑같은 코드를 실행했는데 (dlg 변경 제외) Windows32에서도 정상적으로 작동했습니다. 그러나, 나는 windows64에서 실행하려고하면 여전히 충돌합니다. – user1119958

+1

난 그냥 Windows 2008 R2 서버 (64 비트)에서 그것을 테스트하고 그것을 작동합니다. 컴파일러 설정을 확인하십시오. 내 것은 모든 CPU입니다. 컴파일러가 64 비트로 설정된 경우 해당 컨트롤이 작동하지 않을 수 있습니다. – Paparazzi

+0

컴파일러 설정을 변경하는 방법에 대한 링크를 제공 할 수 있습니까? – user1119958