문제

특정 파일 확장을 제외하는 C# OpenFileDialog에 필터를 넣으려고합니다. 예를 들어 .txt 파일이 아닌 디렉토리에 모든 파일을 표시하려고합니다.

이것을 할 방법이 있습니까?

도움이 되었습니까?

해결책

BCL OpenFiledialog를 사용하여이를 수행하는 직접적인 방법은 없습니다.

몇 가지 옵션을 생각할 수 있습니다.

1) 지원하려는 모든 유형 만있는 필터를 만듭니다. 이것이 내 추천 일 것입니다. 왜냐하면 이것이 이러한 유형의 운영에 대한 가장 일반적인 방법이기 때문입니다.

2) 이것의 선을 따라 무언가를 사용하십시오 Custom OpenFiledialog 구현. 그런 다음 선택한 파일에 .txt extension이있는 경우 OnFileNameChanged () 메소드를 대체하여 "열기"버튼을 비활성화 할 수 있습니다.

3) 사용자가 .txt 파일을 선택하고 오류 대화 상자를 던지고 파일 대화 상자를 다시 열게하십시오. 그래도 이것은 나에게 너무 크지 않고 너무 크지 않습니다 ....

다른 팁

나는 이것이 가능하지 않다고 생각합니다. 필터가 설정되는 방식은 표시 할 파일을 선택할 수 있지만 "모든 파일을 제외한 모든 파일"을 표시하는 방법은 없다고 생각합니다. 그것을 생각해보십시오. Windows에서 열린 파일 대화 상자를 본 적이 있습니까? 나는 내가 본 적이 없다고 생각합니다.

가장 좋은 방법은 모든 파일을 선택한 다음 허용되지 않는 파일을 선택하거나 처리 할 수있는 모든 파일로 필터링하는 경우 사용자에게 프롬프트하는 것입니다.

Google 검색 "OpenFileDialog"에서 찾을 수 있습니다.

편집 : 제외 측면에서 확장되지 않아서 죄송합니다. 이 극단으로 갈 필요는 없지만 귀하의 요구를 충족시킬 것입니다 ....

  • 사용자가 선택할 수있는 모든 파일을 재귀 디렉토리 검색하십시오. (작은 폴더 세트입니다.)
  • 해당 파일의 확장을 고유하게 식별하십시오. (system.io.path.getextension () 및 linq의 .distint () 메소드는 여기에서 잘 작동 할 수 있습니다)
  • 목록에서 ".txt"항목을 제거하십시오.
  • 이러한 확장을 통해 반복하여 필터 문자열을 구성하십시오.

나는 이것이 불가능하다는 것을 두려워한다. 당신은해야 할 것입니다

  • a) 허용해야 할 모든 확장 목록을 포함하거나

  • b) 모든 확장자를 허용 한 다음 선택한 파일에 확장자가있는 경우 대화 상자를 다시 연마하는 간단한 체크인 코드를 사용하십시오. .txt.

또한이 질문에 대해 좀 더 많은 맥락을 제공 할 수 있습니까? 나는 명시 적으로 필요할 수있는 시나리오를 구상하는 데 어려움을 겪고 있습니다. 들어오지 못하게 하다 특정 확장. 거의 모든 상황에서 필터 (및 약간의 체크인 코드)만으로 도망 갈 수 없습니다.

여기에 완전히 다른 접근법이 있습니다.

OpenFiledialog를 사용하는 대신 필요한 특정 기능을 분석하고 나만의 대화 상자를 만듭니다. 원하는 필터링을 쉽게 제공 할 수 있지만 난이도는 새 UI 구현 및 유지 보수로 이동합니다.

나는 당신이 이것을하는 것을 제안하지는 않지만 때로는 사용자가 필요한 것에 대해 오히려 주장합니다.

또 다른 대안 : 대화 상자를 사용하는 대신 앱에 잘 맞는 완전히 다른 것을 생각해냅니다. 이것은 불가능할 수도 있지만 앱에 대해 많이 알지 못합니다.

필터를 설정할 수 없습니다 들어오지 못하게 하다 파일 대화 상자에서 내선.

그러나 당신은 대의원을 구현할 수 있습니다 FileOk 대화 상자의 이벤트. 이 이벤트는 사용자가 선택한 파일 직전에 발생하며 이벤트 인수는 Cancel 선택을 허용하지 않도록 설정할 수있는 속성.

실제로 잘못된 파일을 보이지 않는 것만 큼 우아하지는 않지만 잘못된 종류의 파일을 선택하지 못하게 할 수 있습니다.

추신 : 파일이 허용되지 않은 이유를 사용자 피드백을 제공하는 것을 잊지 마십시오. 그렇지 않으면 'TXT'파일을 선택할 때 대화 상자가 닫히지 않는 이유가 궁금 할 수도 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top