آموزش سی‌شارپ C# – بخش ۲۸

آموزش سی‌شارپ C# – بخش ۲۸
  • 1392/1/8
  • Jeff Mosawy
  • 16
  • مقدمه

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

حال فرض کنید که بخواهید یک قابلیتی را به کاربر بدهید که بتواند خودش در زمان اجرای برنامه، عکسی را با استفاده از یک فرم Open Dialog Box وارد برنامه کرده و آن را مشاهده کند. در این جلسه نحوه انجام این کار را به شما آموزش خواهیم داد.

  • ایجاد یک Open File Dialog

یک نگاهی به Tool Box بیاندازید. یک بخشی با نام Dialogs وجود دارد که در این بخش حدود ۶ مورد مختلف وجود دارند.

1-Toolbox_Dialogs

انواع مختلفی از دیالوگ‌ها که ممکن است آن‌ها را در محیط Windows دیده باشید در این لیست وجود دارد. گزینه‌ای که در عکس بالا انتخاب شده، گزینه مورد نظر ماست. بر روی آن Double-Click کنید (دوبار کلیک کنید.)؛ مشاهده خواهید کرد که یک گزینه‌ی جدیدی در پایین برنامه Visual Studio اضافه می‌شود. این گزینه دقیقاً در کنار menuStrip1 می‌باشد.

2-OpenFileDialog

همانطور که متوجه شدید، چیزی در فرم شما (بر خلاف menuStrip) نمایش داده نشد، چرا که Open File Dialog یک پنجره‌ی مخفی‌ای است که تنها در صورت نیاز قابل مشاهده خواهد بود.

به پنجره Properties مربوط به OpenFileDialog مراجعه کنید و مشخصه Name آن را به یک نام کوتاه‌تر تبدیل می‌کنیم. مثلاً:

Name: OpenFD

3-OpenFileDialog_Properties

وقتی که نام آن را عوض می‌کنید، متقابلاً باید نام آن در پایین پنجره Visual Studio نیز تغییر پیدا کند.

4-OpenFileDialog-Object

در حالی که شیء OpenFD در حالت انتخاب‌شده (Selected) می‌باشد، یک نگاه دیگری به پنجره Properties بیاندازید. شما مشاهده خواهید کرد که مشخصه‌هایی همچون: Filter، File Name، InitialDirectory و Title وجود دارند. ما این مشخصه‌ها را توسط کد تغییر خواهیم داد؛ نه داخل خود ToolBox.

موضوع دیگری که می‌بایست در ذهن خود داشته باشید این است که Open File Dialog در واقع فایلی را باز نمی‌کند! کاری که دیالوگ‌ها انجام می‌دهند این است که به شما این اجازه را بدهند که فایلی را برای باز شدن انتخاب کنید. شما می‌بایست کد جداگانه‌ای را برای باز شدن فایل‌ها بنویسید. تنها کاری شما در حال حاضر در حال انجام آن هستید، دریافت اسم فایل است.

ما فعلاً می‌خواهیم کاری کنیم که اگر کاربر بر روی گزینه View Images از منوی View کلیک کنید، پنجره Open File برای وی نمایش داده شود. برای این‌کار بر روی View Images دوبار کلیک کنید تا وارد کدهای مربوط به آن شویم.

5-MenuView_CodeStub

برای اینکه پنجره دیالوگ به نمایش در آید، کد زیر را مابین دو پرانتز قرار دهید:

openFD.ShowDialog();

فکر نمی کنم که کد بالا نیازی به توضیح داشته باشد. در واقع ما به کامپایلر می‌گویم که تابع ShowDialog را از شیء openFD فراخوانی کن.

حال برنامه خود را اجرا کنید و سعی کنید بر روی View Images کلیک کنید. پنجره‌ای به شکل زیر برای شما نمایش داده خواهد شد.

6-openFD

بدلیل اینکه ما کاری جز نوشتن کدی برای باز کردن پنجره‌ی فوق نکردیم، خیلی از اتفاقات به‌صورت پیشفرض در نظر گرفته شده است. مثلاً محل اولیه باز شدن به‌صورت پیشفرض Document در ویندوز ۷ می‌باشد. نام فایل به‌صورت پیشفرض openFileDialog1 در نظر گرفته شده. تمامی این موارد (و خیلی‌های دیگر) را می‌توانیم به‌راحتی عوض کنیم.

کارها را به‌ترتیب انجام می‌دهیم. اول بیاییم یک عنوان (Title) برای پنجره دیالوگ انتخاب کنیم. کد زیر را اضافه کنید:

openFD.Title = “Insert an Image”;

شما هرچیزی را داخل کوتیشن می‌توانید بنویسید. در واقع Title، نمایشگر عنوان پنجره است که در ویندوز‌های XP و ویندوز ویستا و ۷، به‌صورت زیر است:

7-OpenFileDialog_Title

8-openFD_title

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

openFD.InitialDirectory = “C:”;

ما مسیر پیشفرض را بر روی درایو C قرار دادیم. در واقع ما اینطور فرض کردیم که تمامی کاربرها یک درایو C در کامپیوترشان موجود است. اما اگر بخواهیم که مسیر را بر روی My Document قرار دهیم (چون می‌دانیم همه کاربران این فولدر را به هر نحوی دارا هستند)، کد زیر را جایگزین کنید:

openFD.InitialDirectory = System.Environment.GetFolderPath(Environment.SpecialFolder.Personal)

برای تغییر نام فایل به‌صورت پیشفرض، از کد زیر استفاده می‌کنیم:

openFD.FileName = ““;

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

یکی از مهم‌ترین کارها (و شاید هم جالب‌ترین آن‌ها) تعیین File Type ها هستند. بدین صورت که ما تعیین می‌کنیم که چه نوع (فرمت) فایلی می‌توانید در برنامه بارگذاری شود. به نمونه‌های زیر دقت کنید.

9-openFD_filesOfType

و

10-OpenFileDialog_FileTypes

برای انجام اینکار، الگوی زیر را یاد بگیرید.

openFD.Filter = “JPEG|*.jpg”;

کد بالا تنها فایل‌هایی با پسوندهای JPG را قبول خواهد کرد و پنجره دیالوگ شما به شکل زیر خواهد بود:

11-OpenFileDialog_Filter

برای اضافه کردن فرمت‌های دیگر، به‌شکل زیر عمل می‌کنیم:

openFD.Filter = “JPEG Images|*.jpg|GIF Images|*.gif|PNG|*.png”;

برای اضافه کردن گزینه آخر که معمولاً با عنوان All files می‌باشد، می‌توانیم به‌شکل زیر عمل کنیم:

openFD.Filter = “JPG|*.jpg|All files|*.*”;

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

جهت دریافت این بخش آموزشی به‌صورت یک فایل PDF، اینجا را کلیک کنید.

دیدگاه خود را وارد کنید
تعداد دیدگاه ها : 16 دیدگاه
  1. سال نو رو بهت تبریک میگم . انشاالله سال خوبی داشته باشی. خوشحالم از اینکه می بینم همچنان پر انرژی داری پیش میری. موفق باشی …

    1. سلام دوست عزیزم،

      خیلی ممنونم، من سال نو رو هم به شما تبریک عرض می‌کنم.
      موفق باشید.

  2. سلام دوست من ، با تشکر بابت آموزشها ی برنامه نویسی ، من میخواستم ببینم که در پایان این جلسات من میتونم با سی شارپ دانلودر بنویسم ؟ چون تا الآن کلی ایده تو ذهنم بود و هست که درگیر کار با ++C هستم .

    در ضمن اگر بشه جلسات به Asp.Net کشیده بشه عالی میشه .

    ممنون و خسته نباشید .

    1. سلام دوست خوبم٬

      منظور شما از دانلودر این هست که بتونید در داخل برنامه فایلی را از طریق اینترنت دریافت کنید؟ یک متد در سی شارپ برای این کار وجود دارد که می تونه با دریافت آدرس یک فایل٬ آن را دریافت کند.
      سی شارپی که آموزشش رو دارم تهیه می کنم٬ بیشتر پایه های اون هست برای افرادی که یا کلاً با برنامه نویسی آشنایی ندارند٬ یا با سی شارپ آشنایی ندارند و دوست دارند که تا یک جایی رو یاد بگیرند و باقی به عهده خودشون هست. من سعی می کنم تا جایی پیش برم که احساس می کنم مابقی رو خود دوستان میتونند با جستجو در اینترنت پیش برن. هیچ موقع یک برنامه نویس نباید همه چیز را بلد و حفظ باشه. کافیه کارش به یک جایی متوقف شه٬ راحت با یک جستجو به نتیجه می رسه و کارش رو ادامه میده.
      در رابطه با زبان آ.اس.پی دات نت٬ برنامه‌ای برای اون نچیدم٬ اما شاید در آینده همچین کاری بکنم.

      ممنونم از شما٬
      موفق باشید!

  3. سلام سال نو مبارک.
    من برای ارتباط با سخت افزار ( پورت سریال ) نیاز دارم که با پروتکل خاصی دیتا ارسال کنم.مثلا به صورت یه پکت هشت بیتی.درمورد ارسال و دریافت به پورت سریال تقریبا مشکل خاصی ندارم، ولی در مورد ارسال اطلاعات به صورت یه پروتکل خاص هیچ اطلاعاتی ندارم.منبع خاصی وجود داره که من بتونم در این مورد اطلاعاتی بدست بیارم.
    ممنون میشم اگه بتونید کمکم کنید.
    درضمن از اینکه حتی توی تعطیلاتم دارید آموزش رو ادامه میدید حسابی ممنونم،خسته نباشید.

    1. سلام دوست عزیزم٬

      بهترین منبعی که می تونید سوال های خودتون رو بپرسید٬ وب سایت stackoverflow.com هست که افراد حرفه ای جواب های شما را خواهند داد. البته دقت کنید که وب سایت فوق انگلیسی هست و باید سوال های خودتون رو به زبان انگلیسی بپرسید.

      ممنونم.
      موفق باشید!

  4. با سلام و سپاس بسیار

    برای اینکه مسیر پیش فرض باز شدن dialog رو یک فولدر به خصوص تعیین کنیم باید چه کرد ؟
    مثلا
    D:\Game\MyFolder

    1. سلام دوست عزیزم،

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

      موفق باشید!

    2. من وقتی به جای :C مسیر مورد نطر رو قرار می دم به اسلش هام گیر میده و باعث ایجاد خطا توی برنامه میشه

    3. سلام دوست عزیزم؛
      شما Slash قرار می‌دهید یا Back Slash؟ در این زمینه دقت کنید؛ در ضمن، دقت کنید که مسیری که وارد می‌کنید حتماً وجود داشته باشد.

      موفق باشید.

    4. سلام به مهندس گرام
      منظورم همون بک اسلش بود

      زیرش یه خط چین چین قرمز میاد و وقتی میرم روش مینویسه :
      Unrecognized escape sequence

      به جای :C باید دقیقا D:\Game\MyFolder قرار بدم دیگه ؟ یا باید کار دیگه هم بکنم؟!

    5. سلام دوست عزیزم
      از کدهای زیر استفاده کنید و نتیجه را به من اعلام کنید.

      folderBrowserDialog1.SelectedPath = @”c:temp”;
      folderBrowserDialog1.ShowDialog();

      به‌جای folderBrowserDialog1، نام شیء خود را قرار دهید.

      موفق باشید.

  5. سلامی دوباره

    آقا فهمیدم به جای یه بک اسلش باید دو تا بک اسلش گذاشت اینطوری » D:\\Game\\MyFolder

    1. سلام دوست عزیزم،

      این‌ها بحث‌های جدایی هستند که در زمینه‌ی آموزش ما نیست.

      موفق باشید!

  6. با سلام
    من میخوام که چند button در پروژم بذارم و روی هر button که کلیک شد به یک windows form دیگه برم.
    این قسمتی از کد منه:
    private void button2_Click(object sender, EventArgs e)
    {
    login move = new login();
    this.Close();
    move.ShowDialog();
    }
    ولی پنجره خیلی سریع بسته میشه.
    من نحوهه ی کار تابع InitializeComponent رو نمیدونم.
    با تشکر از شما

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