توضیحات پیشنهادی نظرات اشتراک
تبلیغات

انواع دیالوگ های انتخاب فایل و پوشه در سی شارپ

فرض کنید یک نرم افزار آنلاین ساخته‌اید که کاربر بایستی تصویری را برای پروفایل خود انتخاب کند؛ یا نرم افزار مدیریت دانلودی را توسعه داده‌اید که کاربر در آن بتواند مسیر پیشفرض فایل‌های دانلودی را تعیین کند. در این مطلب از فول کده، قصد داریم تا شما کاربران عزیز را با انجام چنین کاری آشنا کنیم.

در واقع کاری که قصد انجام آن را داریم، این است که کاربر بتواند مسیر فایل یا پوشه‌ای را انتخاب کند. در برخی برنامه‌ها، دیده‌اید که گزینه‌ای به نام Browse برای این امر وجود داشته و با کلیک برروی آن، پنجره‌ای همانند File Explorer ویندوز باز می‌شود. خوشبختانه دات نت فریمورک، انجام چنین کاری را با فراهم کردن کنترل‌هایی، بسیار آسان کرده است و نیازی نیست که خودمان چنین فرم‌هایی را بسازیم. این کنتترل‌ها، موارد زیر می‌باشند؛ که در ادامه تک تک آن‌ها را توضیح خواهم داد:

  • FolderBrowserDialog: انتخاب مسیر یک پوشه
  • OpenFileDialog: انتخاب مسیر یک یا چند فایل جهت باز کردن آن‌ها
  • SaveFlieDialog: انتخاب یک مسیر جهت ذخیره‌سازی یک فایل

مراحل کار

یک دکمه به فرم خود اضافه کرده و نام آن را Browse قرار دهید. سپس از بخش Toolbox، یک FolderBrowserDialog نیز به فرم خود اضافه کنید. خواهید دید که این کنترل، به‌صورت ویژوالی در فرم ظاهر نشده و در انتهای پنجره، آیتم آن اضافه می‌شود. با کلیک برروی آن، در بخش Properties نیز می‌توان ویژگی‌های آن را تغییر داد. فعلا با این موارد کاری نداریم.

در رویداد کلیک دکمه، کد زیر را بنویسید:

در اینجا، متد ShowDialog مربوط به کنترل FolderBrowserDialog فراخوانی شده است. این متد، فرم مربوط به کنترل FolderBrowserDialog را نمایش می‌دهد؛ اما این نمایش، به‌صورت دیالوگی بوده و کاربر نمی‌تواند به فرم قبلی بازگردد؛ مگر تا زمانی که فرم جدیدی که نمایش داده شده است، بسته شود. این متد، خروجی‌ای از نوع DialogResult برمی‌گرداند. DialogResult یک Enum تعریف شده در سی‌شارپ است؛ که شامل مقادیر مختلفی از جمله OK و Cancel می‌باشد. در اینجا اگر مقدار آن OK باشد، یعنی آنکه از فرم، جواب درستی برگردانده شده و فرم توسط کاربر، لغو یا بسته نشده است. در ادامه و درصورتی که جواب OK بود، مسیر انتخاب شده را از ویژگی SelectedPath مربوط به FolderBrowserDialog می‌توان به‌دست آورده و مورد استفاده قرار داد؛ که در کد بالا، این مسیر با یک MessageBox نمایش داده شده است. اکنون برنامه را اجرا کرده و کارکرد کد بالا را مشاهده کنید.


تا به‌اینجا، یاد گرفتیم که چگونه می‌توانیم به کاربر اجازه‌ی انتخاب مسیر یک پوشه را بدهیم؛ اما در اکثر اوقات، نیاز داریم کاربر، مسیر یک فایلی را انتخاب کند. در چنین شرایطی بایستی از کنترل OpenFileDialog استفاده کنیم. بنابراین، این کنترل را از قسمت Toobox به فرم خود اضافه کرده و سپس در بخش رویداد کلیک دکمه، دستورات زیر را بنویسید:

خیلی شبیه به کدهای FolderBrowserDialog است؛ نه؟! بله درست است. در اینجا نیز به‌همان صورت می‌باشد؛ با این تفاوت که به‌جای ویژگی SelectedPath، از ویژگی FileName برای به‌دست آوردن مسیر استفاده شده است.


تا به‌اینجا، می‌توانیم اجازه‌ی انتخاب مسیر یک پوشه و یا یک فایل را به‌کاربر خود بدهیم. اما صبر کنید؛ اگر قرار باشد کاربر، مسیری را برای ذخیره‌ی یک فایل انتخاب کند، در این‌صورت بایستی چه‌کاری انجام دهیم؟! شاید بگویید که خب مسیر پوشه را انتخاب می‌کند؛ اما صبر کنید! در آنجا، مسیر یک پوشه انتخاب می‌شود، اما کاربر، امکان تعیین نام فایل جهت ذخیره‌سازی را ندارد؛ مگر آنکه خودمان یک نام پیشفرض قرار دهیم. اما برای چنین شرایطی، دیالوگ SaveFlieDialog ساخته شده است. در ابتدا آن را به فرم خود اضافه کرده و سپس کد زیر را برای رویداد دکمه بنویسید:

کد آن درست همانند کد OpenFileDialog است! اما تفاوت اصلی در اینجاست که اگر OpenFileDialog را اجرا کنید، دیالوگی نمایش داده می‌شود که در آن مجبور به انتخاب یک فایل هستید و این فایل بایستی وجود داشته باشد و اگر در چنین حالتی، در فیلد File Name دیالوگ، اسم دلخواهی نوشته و برروی Open کلیک کنید، با خطایی مواجه می‌شوید که به‌شما می‌گوید فایل وجود ندارد. اما در صورتی که از SaveFlieDialog استفاده کرده باشید، با انتخاب یک فایل و کلیک برروی Save، مسیر آن فایل را جهت ذحیره‌سازی انتخاب می‌کنید؛ که قبل از آن، دیالوگ از شما می‌پرسد که آیا قصد جایگزاری محتوای جدید به‌جای این فایل را دارید یا خیر؛چرا که فایل از قبل وجود دارد. اما در صورتی که در دیالوگ باز شده، اسمی را در فیلد File Name نوشته و برروی Save کلیک کنید و آن فایل نیز در آن مسیر وجود نداشته باشد، خطایی مبنا بر اینکه مسیر وجود ندارد، به‌شما نمایش داده نمی‌شود.

البته توجه داشته باشید، اینکه دیالوگ به‌شما هشدار می‌دهد که مسیر وجود داشته و آیا قصد جایگزاری دارید یا خیر، عملا فقط یک سوال تو خالی است؛ بدین معنا که تا شما در کد برنامه‌ی خود، عملیات جایگزاری را انجام ندهید، این اتفاق هیچوقت رخ نخواهد داد.

تعیین پسوند فایل‌ها

طبیعتا اگر قصد داشته باشیم تا کاربر در برنامه‌ی ما بتواند فقط فایل‌های تصویری را انتخاب کند، در این‌صورت بایستی نمایش فایل‌ها در دیالوگ را محدودتر کنیم. یا شاید گاهی بخواهیم فیلترهایی را در دیالوگ قرار دهیم که با انتخاب آن‌ها، تنها پسوند‌های خاصی نمایش داده شوند. این مورد را در بسیاری از نرم افزارها نیز مشاهده کرده‌اید و در آخر یک فیلتر All Files نیز وجود دارد. اکنون بیایید این مسئله را در نرم‌افزار خود پیاده کنیم.

در ویژگی‌های OpenFileDialog، به‌دنبال ویژگی Filter بگردید. اکنون مقدار زیر را در آن قرار دهید:
PNG Files|*.png|JPG Files|*.jpg|All Files|*.*
الگو بدین صورت است که عنوان فیلتر را نوشته و سپس یک علامت | قرار داده و نوع یا همان روند کار کردن فیلتر را می‌نویسیم؛ پس از آن، مجدد یک علامت | قرار داده و سپس عنوان و فیلتر جدیدی را می‌نویسیم. در بالا، *.png می‌گوید که اسم فایل می‌تواند هرچیزی باشد، ولی پسوند آن بایستی حتما png باشد.

اما گاهی نیز ممکن است تا برای یک عنوان، بخواهیم چندین پسوند مشخص کنیم! برای مثال، عنوان Image Files، تصاویری با پسوندهای png و jpg را نمایش می‌دهد. در این‌صورت، کافیست ویژگی Filter را به‌صورت زیر پیاده‌سازی کنیم:
Image Files|*.png;*.jpg|All Files|*.*

به‌همین سادگی … 🙂


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

درباره نویسنده

هادی اکبرزاده

[ مدیر فول کده ]

علاقه‌مند به اشتراک‌گذاری اطلاعات در هر زمینه‌ای که توان و وقتش باشه.

پاسخ دهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

نظرات ثبت شده 8 دیدگاه

    1. سبحان کاربر مهمان گفت:

      سلام.
      وقت بخیر و خسته نباشید.
      خیلی ممنونم از آموزش های کامل و جامع شما.
      می خواستم بدونم آیا ما می تونیم برنامه ای درست کنیم که رو خود کامپیوتر کاربر تغییر ایجاد کنه؟
      برای مثال یک برنامه ای درست می کنیم که در آن کاربر عکسی رو آپلود کنه و با زدن دکمه ای برنامه اون عکس رو به جای عکس صفحه ی کامپیوتر (Desktop ) تغییر بده .
      خیلی خیلی ممنون.

      10
      1. هادی اکبرزاده مدیر سایت گفت:

        سلام. بله میشه هرکاری انجام داد 🙂

        1. سبحان کاربر مهمان گفت:

          می تونید به من روش کد نویسیشو بگید

          00
          1. هادی اکبرزاده مدیر سایت گفت:

            لینک: «قطعه کد تغییر تصویر دسکتاپ در سی شارپ»

    2. احسان کاربر مهمان گفت:

      سلام
      ببخشید مزاحم شدم،
      دو تا سوال داشتم.
      1.چگونه می تونم یک دکمه بگزارم که با زدنش فایلی که خودم از قبل در نظر گرفتم لود شه؟
      2.در ویژوال استودیو چطوری رنگ نوشته ها تون رو عوض کردید؟
      ممنون وقت می گزارید.

      00
      1. هادی اکبرزاده مدیر سایت گفت:

        سلام.
        1. خب چه فایلی لود شه؟! هر فایلی با فایل دیگه متفاوته!
        2. رنگ کدوم نوشته‌ها؟!

        1. احسان کاربر مهمان گفت:

          سلام
          1. مثلا فایل PDF
          برنامه ای که مد نظر من هست مثل یک کتاب خانه است که کاربر ،کتابی که دنبالش هست رو بتونه از تو اون اپ پیدا کنه و باز کنه
          2. نوشته هایی که تو سایت قرار دادید

          00
          1. هادی اکبرزاده مدیر سایت گفت:

            1. در مورد باز کردن فایل PDF باید مطلب جدایی قرار بدیم.
            2. نوشته‌های داخل سایت چه ارتباطی به ویژوال استودیو داره؟!