문제

나의 OpenFileDialog 하나의 싱글이 있습니다 Filter 또한 DefaultExt. 대화 상자가 열리면 모든 인터넷 바로 가기가 나열되는 이유가 궁금합니다 (예 : *.url 파일은 아니지만 폴더에 바로 가기를 가져 오는 것이 좋습니다).

사용자에게 표시된 목록에 포함시키기 위해 켜질 수있는 매직 스위치가 있습니까?

현재 상태를 처리해야합니다. FileOk 설정으로 이벤트 핸들러 e.Cancel 에게 true 사용자가 선택한 것을 감지하면 *.URL 파일 (시간의 100% 작동하지 않으면 일부 바로 가기는 여전히 FileOk 필터). 그러나 처음에 목록에 넣지 않는 것이 더 나을 것입니다.

도움이 되었습니까?

해결책

Windows의 열린 파일 공통 대화 상자는 폴더와 함께 인터넷 단축키를 보여주는 것이 맞습니다. 이 동작이 왜 존재하는지 모르겠지만, Win32 (확인하려면 메모장을 시도해보십시오)와 Winforms 앱에서 발생합니다.

이 문제를 해결하는 방법이 있지만 경고 : 해킹됩니다! Filedialog 클래스에서 사용자 정의 파일 대화 상자 클래스를 도출하면 Filedialog 운영의 모든 측면을 사용자 정의하는 데 사용할 수있는 몇 가지 보호 이벤트에 액세스 할 수 있습니다.

Dino Esposito는 2003 년 11 월 에이 기술의 작동 방식을 보여주는 MSDN 잡지 기사를 작성했습니다. 이 기사는 더 이상 MSDN 사이트에 있지 않지만 Wayback Machine의 아카이브에서 가져올 수 있습니다. http://web.archive.org/web/20150117123625/http://msdn.microsoft.com/en-us/magazine/cc300434.aspx.

아마도 당신이해야 할 일은 파일 대화의 wndproc을 고치거나 서브 클래스하고, 파일 목록 컨트롤을 수동으로 살펴보고, 바로 가기 인 항목을 식별하고, 파일 목록 컨트롤로 Windows 메시지를 보내는 것입니다. 그런 다음 해당 목록 (예 : 디렉토리 변경)의 새로 고침을보고 필터링 작업을 반복해야합니다.

이것은 큰 해킹이지만 가능합니다.

이것이 너무 많은 일이거나 해킹이 너무 많으면 Fileok 이벤트를 사용하여 사용자가 반환하여 바로 가기를 선택하지 못하게하는 것이 좋습니다. Cancel=true Fileok 이벤트를 위해 CancelEventhandler에서.

다른 팁

성가신. FileOK 이벤트의 핸들러를 구현하여 사용자가 하나를 선택할 수 없습니다.

private void openFileDialog1_FileOk(object sender, CancelEventArgs e) {
  string ext = System.IO.Path.GetExtension(openFileDialog1.FileName);
  if (String.Compare(ext, ".url", true) == 0) e.Cancel = true;
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top