باستثناء ملحقات الملفات من مربع حوار ملف فتح في C #

StackOverflow https://stackoverflow.com/questions/921937

سؤال

أحاول أن أضع مرشحا على C # OpenFileDialog الذي يستبعد بعض ملحقات الملفات. على سبيل المثال، أريد ذلك إظهار جميع الملفات في دليل غير ملفات .txt.

هل هناك طريقة للقيام بذلك؟

هل كانت مفيدة؟

المحلول

لا توجد طريقة مباشرة للقيام بذلك باستخدام BCL OpenFileDialog.

أستطيع أن أفكر في بعض الخيارات:

1) جعل مرشح يحتوي على كل الأنواع التي تريد دعمها. ستكون هذه توصيتي، لأن هذه هي الطريقة الأكثر شيوعا لهذا النوع من العملية.

2) استخدم شيئا على غرار هذا تطبيق Openfiledialog مخصص. وبعد يمكنك بعد ذلك تجاوز طريقة OnFilenAmechanged () لتقسيم الزر "فتح" إذا كان الملف المحدد يحتوي على ملحق .txt.

3) دع المستخدم اختيار ملف .txt، ورمي مربع حوار خطأ، وإعادة فتح مربع حوار الملف. هذا يشعر بشكل كبير وليس رائعا بالنسبة لي، على الرغم من ....

نصائح أخرى

لا أعتقد أن هذا ممكن. الطريقة التي تم إعداد المرشح فيها، هل يمكنك اختيار الملفات التي تعرضها، لكن لا أعتقد أن هناك طريقة لإظهار "جميع الملفات باستثناء ...". تعال إلى التفكير في الأمر، هل سبق لك أن رأيت حوار ملف مفتوح في نظام Windows الذي يحتوي على هذا؟ لا أعتقد أنني رأيت واحدة.

أفضل رهان لديك هو السماح لهم باختيار جميع الملفات، ثم يدفع المستخدم إذا حددوا واحدة غير مسموح بها أو تصفيةها إلى جميع الملفات الممكنة التي يمكنك التعامل معها.

وجدت مع Google Search "OpenFiledialog"

تحرير: آسف على عدم التوسع في جوانب استبعاد. قد لا تحتاج إلى الذهاب إلى هذا المتطرف، لكنه سيلبي احتياجاتك ....

  • قم بفحص دليل متكرر لجميع الملفات التي قد يختارها المستخدم من بينها. (نأمل أن تكون مجموعة صغيرة من المجلدات.)
  • تحديد فريد تمديدات على تلك الملفات. (system.io.path.getextension () وطريقة Linq's .distint () قد تعمل جيدا هنا)
  • قم بإزالة إدخال ".txt" من القائمة.
  • بناء سلسلة تصفية عن طريق الحلقات من خلال هذه الملحقات.

أخشى أن هذا غير ممكن. سوف تضطر إما إلى

  • أ) قم بتضمين قائمة طويلة من جميع الامتدادات التي يجب السماح بها أو

  • ب) السماح بجميع الملحقات، ثم استخدم رمز فحص بسيط يعيد فتح الحوار إذا كان الملف المحدد لديه امتداد .txt.

أيضا، هل يمكنك تقديم سياق أكثر قليلا لهذا السؤال؟ أواجه مشكلة في تكرور سيناريو حيث أحتاج صراحة إلى استبعاد امتداد معين. ربما لا يمكنك الابتعاد عن مرشح فقط (وربما التحقق من القليل من التعليمات البرمجية) في جميع المواقف تقريبا.

إليك نهج مختلف تماما، حيث من غير المرجح أن تستخدمه.

بدلا من استخدام OpenFileDialog، قم بتحليل الميزات المحددة التي تحتاجها وإنشاء مربع الحوار الخاص بك. يمكنك بسهولة توفير أي تصفية تريدها، ولكن بعد ذلك، تتحرك الصعوبة إلى التنفيذ والحفاظ على UI الجديد.

لا أقترح عليك القيام بذلك، ولكن في بعض الأحيان يكون المستخدمون إصرارا على ما يحتاجون إليه.

بديل آخر: بدلا من استخدام مربع حوار، توصل إلى شيء مختلف تماما يناسب جيدا داخل التطبيق. قد لا يكون هذا ممكنا، ولكن بعد ذلك نحن لا نعرف الكثير عن التطبيق.

لا يمكنك تعيين مرشح ل استبعاد ملحقات من مربعات حوار الملفات.

ومع ذلك، يمكنك تنفيذ مندوب FileOk الحدث على مربع الحوار. ينطلق هذا الحدث قبل أن يتم قبول الملف الذي تم تحديده، وسوف توفر وسيطات الأحداث Cancel الخاصية التي يمكنك ضبطها على عدم السماح بالاختيار.

ليس بالأمر الأنيق في الواقع على الملفات الخاطئة غير مرئية، لكنه سيسمح لك بعدم السماح باختيار النوع الخطأ من الملفات.

ملاحظة: لا تنس أن تعطي ملاحظات المستخدمين لماذا لم يتم قبول الملف، وإلا فقد يتساءلون عن سبب عدم إغلاق مربع الحوار عند اختيار ملف "TXT".

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top