کنترل OpenFileDialog

کنترل System.Windows.Forms.OpenFileDialog، به شما اجازه می‌دهید که یک فایل را انتخاب کرده و بخوانید مثلاً یک فایل متنی را باز کرده و محتویات آن را بخوانید. این دیالوگ، به شما امکان پیمایش فایل‌ها موجود بر روی سیستم را می‌دهد. شما می‌توانید نام یک فایل را در مسیر جاری یا اینکه مسیر کامل آن را در جعبه متنی که در جلوی متن File Name و پایین پنجره قرار دارد بنویسید.
dialogs-05
در جدول زیر لیستی از خاصیت‌های مهم این کنترل توضیح داده شده است:

خاصیت توضیح
AddExtention تعیین می‌کند که هنگامی که کاربر نام یک فایل بدون پسوند را تایپ می‌کند یک پسوند به طور خودکار به آن اضافه شود یا نه؟
CheckFileExists تعیین می‌کند زمانی که کاربر نام یک فایل را که وجود ندارد می‌نویسد یک پنجره‌ی اخطار به او نمایش داده شود یا نه؟
CheckPathExists تعیین می‌کند زمانی که کاربر مسیری که وجود ندارد را می‌نویسد یک پنجره‌ی اخطار به او نمایش داده شود یا نه؟
DefaultExt پسوند پیشفرض. زمانی که کاربر نام فایل را بدون پسوند بنویسد به طور خودکار به آخر فایل اضافه می‌شود.
FileName فایلی که توسط کاربر انتخاب شده است.
FileNames مجموعه‌ای از فایل‌ها که توسط کاربر انتخاب می‌شود.
Filter با استفاده از این خاصیت می‌توانید لیست فایل‌هایی (پسوندهایی) که کاربر می‌تواند انتخاب کند را مشخص کنید.
FilterIndex اگر پسوندهای متفاوتی در دسترس باشد، با استفاده از این خصوصیت می‌توانید تعیین کنید که کدام پسوند به طور پیشفرض هنگام باز شدن پنجره نمایش داده شود.
InitialDirectory دایرکتوری پیشفرضی که هنگام نمایش پنجره در آن قرار داریم را تعیین می‌کند.
Multiselect تعیین می‌کند که امکان انتخاب چندین فایل توسط کاربر وجود دارد یا نه؟
Title عنوان پنجره را تعیین می‌کند.

خاصیت AddExtension تعیین می‌کند زمانی که کاربر پسوند فایل را نمی‌نویسد، یک پسوند که در خاصیت DefaultExt مشخص شده است به آن اضافه کند یا نه؟ توصیه می‌شود که مقدار دو خاصیت CheckFileExists و CheckPathExists را برابر true قرار دهید تا زمانی که فایل یا مسیر مشخصی وجود ندارد، به کاربر اخطاری نمایش داده شود. خصوصیت InitialDirectory تعیین کننده پوشه پیشفرضی است که هنگام نمایش دیالوگ در آن قرار داریم. خصوصیت Title نمایانگر متنی است که در عنوان دیالوگ قرار دارد. خصوصیت FileName مسیر فایلی که کاربر توسط دیالوگ انتخاب کرده است را بر می‌گرداند. همچنین با استفاده از خاصیت MultiSelect امکان انتخاب چندین فایل در دیالوگ را می‌دهید. لیست فایل‌های انتخاب شده در خصوصیت FileNames قرار می‌گیرد.

فیلتر کردن فایل‌ها

شما می‌توانید فقط فایل‌هایی که دارای نوع مشخصی هستند را در پنجره نمایش دهید. برای این کار باید یک الگو که یک رشته است را در خاصیت Filter مشخص کنید. به عنوان مثال، می‌توانیم فقط فایل‌هایی که دارای پسوند .txt هستند را در پنجره نمایش دهیم. خاصیت Filter به یک الگوی خاص نیاز دارد.

Description1|FilterPattern1|Description2|FilterPattern2|...DescriptionN|FilterPatternN

ابتدا باید شرحی از نوع فایل را مشخص کنیم. سپس کاراکتر | و الگوی مشخصی را بعد از آن قرار می‌دهیم. به عنوان مثال الگوی زیر فقط لیست فایل‌های متنی را نمایش می‌دهد.

Text Files|*.txt

شرح نوع فایل Text Files و الگوی آن *.txt است. کاراکتر * یک کاراکتر جایگزین است که بیانگر هر نامی است. قسمت .txt مشخص کننده یک پسوند خاص است. الگو تعیین می‌کند که فایل‌های با پسوند .txt در پنجره نمایش داده شود. همچنین از کاراکترهای جایگزین برای بسیاری از هدف‌های دیگر نیز استفاده کنید. به عنوان مثال، الگوی m*.txt تمامی فایل‌های متنی که با حرف m شروع می‌شوند را تطبیق می‌دهد. یعنی فقط فایل‌های متنی که اسمشان با حرف m شروع می‌شود را تشخیص می‌دهد. الگوی *r.txt تمامی فایل‌های متنی که نام آنها به حرف r ختم می‌شود را تطبیق می‌دهد. الگوی *.* تمامی انواع فایل‌ها را تطبیق می‌دهد. الگوی *.t* تمامی فایل‌های که پسوند انها با حرف t شروع می‌شود را تطبیق می‌دهد. شما می‌توانید چندین فیلتر را مشخص کنید. به عنوان مثال الگوی زیر متشکل از چندین فیلتر است.

Text Files|*.txt|Bitmap Files|*.bmp|All Files|*.*

در جلوی جعبه متنی که نام فایل را می‌نویسید، یک کامبو باکس وجود دارد که لیست فیلترهای مختلف در آن قرار دارد.
file-open-dialog-01
همچنین این امکان وجود دارد که برای چندین پسوند یک توضیح نوشته شود. به عنوان مثال، فایل‌های تصویری دارای پسوندهای مختلفی از جمله bmp ،jpeg ،png هستند. شما به راحتی می‌توانید پسوندهای مختلف را با سمیکالن از یکدیگر جدا کنید.

Image Files|*.bmp;*.jpeg;*.png;*.gif

هنگامی که این فیلتر را انتخاب می‌کنید تمامی فایل‌هایی که حداقل با یکی از الگوهای آن مطابقت داشته باشد، نشان داده می‌شود.

مثالی از کاربرد OpenFileDialog

در ادامه یک پروژه جدید از نوع Windows Application درست می‌کنیم، که از قابلیت‌های پایه‌ای کنترل OpenFileDialog استفاده می‌کند. کاربر با استفاده از برنامه یک فایل متنی را انتخاب می‌کند سپس برنامه محتوای آن فایل را در یک جعبه متن چند خطی نشان می‌دهد. ابتدا به این نکته توجه کنید که فضای نامی System.IO را به برنامه اضافه کنید.

using System.IO;

یک فرم به شکل زیر طراحی کنید. از جعبه متنی استفاده کنید که خاصیت MultiLine آن برابر true باشد. مقادیر خاصیت‌های Scrollbars و WordWrap را به ترتیب برابر both و false تغییر دهید. یک کنترل OpenFileDialog را از جعبه ابزار بر روی فرم قرار دهید.
file-open-dialog-02
بر روی دکمه دو بار کلیک کنید تا کنترل کننده رویداد Click ایجاد شود. دوباره یادآوری می‌شود که فضای نامی System.IO را به لیست فضای نامی کلاس اضافه کنید. از کد زیر در داخل کنترل کننده رویداد استفاده کنید.

   1: private void button1_Click(object sender, EventArgs e)
   2: {
   3:     //فقط فایل‌های متنی نمایش داده شوند
   4:     openFileDialog1.Filter = "Text Files|*.txt";
   5:     //هیچ فایلی در ابتدا انتخاب نشود
   6:     openFileDialog1.FileName = String.Empty;
   7: 
   8:     //پنجره‌ای برای انتخاب فایل باز شود
   9:     DialogResult result = openFileDialog1.ShowDialog();
  10: 
  11:     //کلیک شد Open اگر دکمه
  12:     if (result == DialogResult.OK)
  13:     {
  14:         //مسیر فایل انتخاب شده در یک متغیر ذخیره می‌شود 
  15:         Stream fs = openFileDialog1.OpenFile();
  16:         // فایل مسیر فایل خوانده می‌شود StreamReader با استفاده از 
  17:         StreamReader reader = new StreamReader(fs);
  18:         //محتویات فایل خوانده می‌شود
  19:         textBox1.Text = reader.ReadToEnd();
  20:         //Close the reader and the stream
  21:         reader.Close();
  22:     }
  23: }

در خط 4 با استفاده از خاصیت Filter یک فیلتر را اضافه می‌کنیم. با استفاده از الگوی آن مشخص می‌کنیم که در پنجره فقط لیست فایل‌های متنی نمایان شود. در خط 6 به خاصیت FileName مقدار empty را نسبت می‌دهیم، تا در ابتدا هیچ فایلی انتخاب نشود. سپس با استفاده از متد ShowDialog() در خط 9 پنجره را نمایش می‌دهیم. این متد خروجی از نوع DialogResult دارد. هنگامی که کاربر یک فایل مجاز را انتخاب و بر روی دکمه Open کلیک می‌کنید خروجی متد برابر DialogResult.OK می‌شود (خط 12). با استفاده از دستور شرط خروجی متد را بررسی می‌کنیم. خروجی متد OpenFile() از کنترل OpenFileDialog را در یک شیء از نوع Stream ذخیره می‌کنیم. شیء Stream به فایل انتخاب شده ارجاع دارد، از این شیء در ساخت شی ای از کلاس StreamReader که کار خواندن از فایل را به عهده دارد استفاده می‌کنیم. با استفاده از متد ReadToEnd() کلاس StreamReader محتوای کامل فایل را خوانده و در خاصیت Text کنترل textBox1 نمایش می‌دهیم. برنامه را اجرا و بر روی دکمه کلیک کنید. یک فایل متنی را از پنجره نمایش داده شده انتخاب کنید. هنگامی که فایلی که مسیر آن توسط کاربر نوشته شده موجود نباشد، یک پیغام خطا به او نمایش داده می‌شود. فراموش نکنید که ابتدا خصوصیات CheckFileExists و CheckPathExists را برابر true قرار دهید. اگر فایل انتخاب شده موجود و مجاز باشد محتوای کامل آن در جعبه متنی قرار می‌گیرد.