آموزش رفتن از یک فرم به فرم دیگر در سی شارپ

ارسال شده توسط: حسین درویشی Comments: 25

آموزش رفتن از یک فرم به فرم دیگر در سی شارپ

در این آموزش قصد دارم تا توضیح مختصری در مورد فرم ها در سی شارپ بیان کنم. و در ادامه در مورد رفتن از یک فرم به فرم دیگر در سی شارپ سخن خواهم گفت.

فرم چیست؟

ویندوز فرم ها در سی شارپ نقش همان پنجره ها در ویندوز را بازی می کنند یا می توان هر صفحه را در اپلیکیشن های ویندوزی، ویندوز فرم نامید.


بیشتر بخوانید: جابجایی بین اکتیویتی ها در اندروید


 

چگونگی جابجایی بین فرم ها در سی شارپ

آنچه در این آموزش دنبال آن هستید، آموزش جابجایی بین فرم های ویندوزی ( رفتن از یک فرم به فرم دیگر ) است. در تولید اپلیکیشن چه برای پلتفرم ویندوز و چه به دیگر پلتفرم ها، جابجایی بین آنها یکی از ضروری ترین آموزرش هاست.

یک پروژه از نوع Windows Form باز کنید و دو تا فرم به آن از منوی Project اضافه کنید.

رفتن از یک فرم به فرم دیگر در سی شارپ

من در این پروژه دوتا فرم با نام های Form1 و Form2 دارم. به Form1 یک Button اضافه کردم و قصد دارم ، با کلیک روی آن به Form2 منتقل داده شوم. برای چنین منظوری می توان از متدهای زیر استفاده کرد.

  1. Show
  2. ShowDialog

برای استفاده از این متدها باید از فرم مقصد یک نمونه در فرم مبدا ایجاد کنیم.

        //رویداد کلیک
private void Button1_Click(object sender, EventArgs e)
{
//روش اول ایجاد شیء
new Form2().Show();
//روش دوم ایجاد شیء
Form2 form2=new Form2();
form2.Show();
}

روش دوم استفاده از ShowDialog

        //رویداد کلیک
private void Button1_Click(object sender, EventArgs e)
{
//روش اول ایجاد شیء
new Form2().ShowDialog();
//روش دوم ایجاد شیء
Form2 form2=new Form2();
form2.ShowDialog();
}

تفاوت Show و ShowDialog در چیست؟

زمانی که از Show استفاده می کنید می توانید به فرم پدر (مبدأ) و فرم مقصد(فرزند) دسترسی داشته باشید. یعنی به محض استارت شدن فرم مقصد، تونایی این را خواهید داشت تا بتوانید با هردو فرم فرزند و پدر تعامل داشته باشید.

موقعی که از ShowDialog استفاده می کنید کاربر نمی تواند با فرم مبدأ تعامل داشته باشد و برای دسترسی به آن باید فرم فرزند بسته شود.

برای بستن فرم می توانید از متد Close استفاده کنید.

 

قصد دارم با نمایش داده شدن فرم مقصد فرم مبدأ مخفی شود.

این کار هم آسان است و کافی است قبل از صدا زدن فرم مقصد از this.Hide استفاده کنید. این به این معنی است که به برنامه اعلام می کنید اول فرم جاری را مخفی کن سپس فرم مقصد را نمایش بده.

        private void Button1_Click(object sender, EventArgs e)
{
this.Hide();
new Form2().ShowDialog();
}

در انتها می توانید پروژه را بصورت رایگان دانلود کنید:

برای امتیاز به این نوشته کلیک کنید!
[کل: 11 میانگین: 4.5]

Comments (25)

  • سید رضا پاسخ

    سلام ، ممنون از راهنمایی شما

    حالا اگه بخوایم فرم یک Hide بشه باید چه دستوری رو بنویسیم ؟

    و بعد اینکه فرم دو باز شد و ما کارمون توش تموم شد ، چطور میتونیم دوباره به فرم 1 برگردیم ؟ ( بدون اینکه برنامه دوباره اجرا بشه

    25 بهمن 1400 at 8:21 ب.ظ
    • حسین درویشی پاسخ

      سلام برای سوال اولتون موقعی که فرم نمایش داده میشه از دستور this.hide() استفاده کنید.
      سوال دومتون باید از فرم یک در فرم دو نمونه بسازید و بعد بعد از اتمام کارتون فرم یک را باز کنید.

      25 بهمن 1400 at 9:27 ب.ظ
  • ندا پاسخ

    سلام
    اگر بخواهیم از محتوای دکمه رادیویی فرم اول در فرم دوم استفاده کنیم چه دستوری باید نوشت

    24 بهمن 1400 at 12:02 ق.ظ
    • حسین درویشی پاسخ

      سلام منظورتون اینه که چک کنید radio button در فرم اول تیک خورده یا نه؟

      24 بهمن 1400 at 5:55 ب.ظ
      • ندا پاسخ

        مثلا در صورتیکه فرم اول تیک خورده باشه محتوای آن در فیلد دوم نمایش داده شود

        25 بهمن 1400 at 11:55 ق.ظ
      • ندا پاسخ

        جواب منو ندادید

        26 بهمن 1400 at 1:15 ق.ظ
  • نسیم پاسخ

    سلام وقت بخیر
    در صورتی که بخواهیم از محتوای دکمه رادیویی فرم اول در فرم دوم استفاده کنیم چه دستوری باید نوشت

    24 بهمن 1400 at 11:14 ق.ظ
  • Shahram پاسخ

    سلام
    میخواستم یه فرم داشته باشم با چند buttom که هر دکمه بهیک فرم جدید داخل فرم اول باز کنه و فرم های باز شده مانند تب های مختلف داخل فرم اول نشان داده شوند. ممنون میشم راهنمایی کنید🙏

    20 تیر 1400 at 3:55 ق.ظ
  • Sana پاسخ

    من اسم فرم دو رو میزنم نمیاره یعنی نام فرمم form2هست ولی مینویسم که بره تو فرم یک عبارت form1 رو نمیاره
    میدونین خطا از کجای تنظیمات برنامست اسم فرم اولمم form1 هستش ولی علت اینکه خطا میده رو نمیدونم

    21 اردیبهشت 1400 at 9:40 ب.ظ
    • حسین درویشی پاسخ

      فرم دو رو پاک کنید و دوباره ایجاد کنید احتمالا اسمش رو بعدا تغییر دادین
      یا نمونه پروژه رو دانلود کنید

      22 اردیبهشت 1400 at 11:32 ق.ظ
  • Hamid پاسخ

    سلام وقت بخیر
    دو تا فرم دارم که با کلیک کردن یک دکمه از فرم اول، فرم دوم باز می شود (فرم اول Hide می شود) در ادامه اگر فرم دوم OK کنم اینبار فرم دوم Hide می شود و فرم اول ظاهر می شود در این حالت متغیرهای private درفرم اول null می گردد. این متغیرها ربطی به فرم دوم ندارن وتا قبل از ظاهر شدن فرم دوم null نیستن ولی وقتی فرم اول برای بار دوم ظاهر می شود این متغیرها null میگردد. میشه دلیلش بهم توضیح بدین؟
    ممنون

    22 بهمن 1399 at 2:54 ب.ظ
  • عبداله پاسخ

    سلام خسته نباشید
    سه تا فرم داریم که از دوتا فرم آن به فرم سومی متصل میشیم راهی هس که به فرم سوم که از فرم 1و2 بهش وصل شدیم شرط بگذاریم وبگیم از فرم 1 یا 2 بهش وصل شدیم

    6 دی 1399 at 1:05 ق.ظ
    • حسین درویشی پاسخ

      سلام بله میشه
      میتونید از متد SentToBak استفاده کنیدو مثلا میخاهیم از فرم یک بریم فرم سه کدش باید به شکل زیر باش

      Form3 fa = new Form3();
      fa.SendToBack("form1");
      fa.ShowDialog();

      حال در فرم سه باید متد زیر رو قرار بدید


      internal void SendToBack(string v)
      {
      if (v == "form1")
      MessageBox.Show("شما از فرم یک به این صفحه اومدید");
      }

      همین کار رو برای فرم دو نیز انجام بدید

      6 دی 1399 at 12:37 ق.ظ
      • احسان پاسخ

        سلام خسته نباشید خدا خیرتون بده خیلی به من برای امتحان ترمم کمک ورد انشالله خداوند مهربان در زندگیتون خیر و برکت زیادی را عنایت کنه

        17 دی 1400 at 2:21 ب.ظ
        • حسین درویشی پاسخ

          سلام درود بر شما!
          خواهش میکنم دوست عزیز باعث افتخار ماست

          17 دی 1400 at 6:59 ب.ظ
  • Parisa پاسخ

    باسلام و وقت بخیر.من در یک فرم اطلاعات کالا از جمله(کد و نام گروه کالا و نام کالا) رو دارم که نام گروه کالا را در کمبوباکسی که به جدول گروه کالا در دیتابیس بایند شده، نمایش دادم. حال میخام در فرم دوم وقتی سطری از گریدویو رو انتخاب کردم اطلاعات رو در فرم قبل نشون بده ، سوال اینکه نام گروه کالا در گریدویو رو در فرم دیگه نشون نمیده بلکه یه نام دیگه رو نشون میده.
    ممنون میشم راهنمایی کنید

    6 آذر 1399 at 7:46 ب.ظ
    • حسین درویشی پاسخ

      سلام تو چت آنلاین پیام بدید تا راهنمایی کنم

      7 آذر 1399 at 8:53 ق.ظ
  • کیارش پاسخ

    سلام خسته نباشید یک سوال داشتم اونم اینه که من انتقال اطلاعات از فرم اول به فرم دوم میتونم ایجاد کنم ولی از فرم دوم میخوام به فرم اول ایجاد کنم یعنی بعد از اینکه فرم 2 با دکمه ای در فرم 1 باز شد نمیتونم اطلاعات در تکس باکس واقع در فرم 2 رو وارد فرم 1 کنم میشه راهنماییم کنین؟؟؟

    28 مهر 1399 at 10:13 ب.ظ
    • حسین درویشی پاسخ

      اطلاعات تکست باکس در فرم2 کی پر میشه با لود شدن فرم دو

      28 مهر 1399 at 10:21 ب.ظ
  • حسین پاسخ

    سلام
    ممنون از توضیحاتتون؛ می‌خواستم بدونم چطور می‌شود با باز شدن فرم سوم، فرم دوم بسته شود؟
    نمونه: هنگامی که در Notepad فرم Find (به عنوان فرم دوم) باز است، می‌توان فرم Replace (به عنوان فرم سوم) را باز کرد و همزمان فرم Find بسته می‌شود.

    14 مهر 1399 at 12:54 ق.ظ
    • حسین درویشی پاسخ

      سلام
      قبل از باز شدن فرم باید دستور this.Hide() رو قرار بدید

      14 مهر 1399 at 10:19 ب.ظ
      • حسین پاسخ

        سلام مجدد و ممنون از پاسختون
        من فکر می‌کنم خوب توضیح ندادم.
        فرم‌های دوم و سوم از طریق فرم اول صدا زده می‌شوند. بنابراین اگر قبل از باز شدن فرم سوم ()this.Hide رو قرار بدیم، فرم اول(فرمی که فرم سوم را از طریق آن باز شده است) بسته می‌شود.
        مثال Notepad که عرض کردم، مثال خوبی است. در فرم اصلی Notepad هستیم و فرم Find را باز می‌کنیم. بدون اینکه فرم Find را ببندیم، فرم Replace را باز می‌کنیم؛ در این مرحله فرم Find بسته می‌شود.
        اگر از دستور ()this.Hide استفاده شود، فرم اصلی Notepad بسته می‌شود.

        16 مهر 1399 at 1:45 ب.ظ
        • حسین درویشی پاسخ

          تو قسمت چت آنلاین پیام بدید راهنمایی کنم

          17 مهر 1399 at 12:28 ق.ظ
          • مهراد

            سلام آقای درویشی لطفا پاسختون به سوال دوستمون رو اینجا هم بزارید تا بقیه هم استفاده کنن ممنون.

            21 مهر 1399 at 7:55 ب.ظ
          • حسین درویشی

            فعلا درخواست نکرده اما اگه بخایین نمونه پروژه رو میفرستم اینجا بردارید

            28 مهر 1399 at 10:20 ب.ظ

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

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