تبلیغات
سی شارپ کده - دسترسی به کنترل های فرم اصلی از طریق دیگر فرم ها !

سی شارپ کده

من در اینترنت و سایت های برنامه نویسی بزرگ فارسی زیاد جستجو کردم ولی هیچ کدوم مطلبی در این باره که چجوری باید به کنترل های فرم اصلی در فرم های دیگر برنامه دسترسی داشته باشیم حرفی نزده بودند برا همین تصمیم گرفتم تا به این مطلب بپردازم

شما میدونید که اگه مثلا بخواهیم تا یه فرم جدید را نمایش دهیم و در آن کنترل هایی را مقدار دهی کنیم چگونه است برای مثال ما میخواهیم تا در فرم اصلی یک کلید و جعبه متن داشته باشیم و زمانیکه روی کلید کلیک کردیم یه فرم جدید نمایش داده بشه و در آن یه جعبه متن باشه و تکست جعبه متن برابر تکست جعبه متن فرم اصلی بشه برای این کار پس از این که آبجکت های مورد نیاز را به برنامه اضافه کردیم باید در رویداد کلیک کلیدمون این کد ها را بنویسیم , با این فرض که جعبه متن فرم اصلی textbox1 و جعبه متن فرم2 textbox2 نام دارند

 ;()Form2 frm = new Form2
;frm.textbox2.Text=textbox1.Text
;()frm.show

ولی حالا اگه بخواهیم تا بعد از نمایش تکست درون جعبه متن فرم2 هرگاه فرم2 بسته شد تکست جعبه متن فرم اصلی برابر تکست جعبه متن فرم2 شود باید چه کار کنیم ؟!! 
البته راه های گوناگونی برای این کار وجود دارد برای مثال با استفاده از متغیر های Global یا سراسری میتوان
چنین کاری کرد ولی هدف ما این است که به طور مستقیم این کار را بر روی جعبه متن فرم اصلی بکنیم
مثل مثال اول . پس با ما باشید تا نحوه ی انجام این کار را ببینید :


ابتدا اجازه بدید تا نگاهی به فایل Program.cs  بیاندازیم :

using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;
 
namespace WindowsFormsApplication1
{
    static class Program
    {
        /// <summary>
        /// The main entry point for the application.
        /// </summary>
        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Form1());
        }
    }
}
همونطور که میبینید در اینجا تابع Main و یه سرس از متد ها در اون وجود دارند . دو متد
اول به کار نا ربطی ندارند و برای همین در مورد اون های بحث نمیکنیم اما متد آخر :
کار این متد اجرای برنامه در قالب یک فرم اصلی است . همینطور که در اینجا میبینید فرم1
به عنوان فرم اصلی برنامه در هنگام اجرای اون باز میشه این بدان معنی است که اگه شما
فرم دومی هم داشته باشید میتونید نامش را به جای فرم1 در این متد قرار بدهید و از اون
پس برنامه ی شما با اون فرم اجرا خواهد شد 
در اینجا فرمی که برای ارسال به متد در متد نوشته شده فرمی است از نوع کلاس فرم1 
و نمونه سازی آن در خود متد انجام شده یعنی هنگام صدا زدن متد و هیچ نامی برای آن
انتخاب نشده و برای همین است که ما نمیتوانیم از طریق فرم های دیگر به طور مستقیم
به آن دسترسی داشته باشیم . در اصل در این جا یک فرم از نوع فرم1 نمونه سازی شده و
اجرا شده . ام اگر بخواهیم تا به فرم اجرا شده کنترل داشته باشیم باید کمی تغییر در کد ان به
وجود بیاوریم
ایتدا در فضای کلاس Program و قبل از متد Main یک شیئ از نوع فرم1 ایجاد میکنیم :
;public static Form2 fr
دلیل این که این شیئ را از نوع static گرفتیم این است که خود متد Main استاتیک است 
و متد های استاتیک فقط میتوانند به اعضای استاتیک فرم دسترسی داشته باشند و ما
چون میخواهیم به frm دسترسی داشته باشیم باید آن را از نوع استاتیک تعریف کنیم
سپس در متد Main و قبل از آخرین متد خط زیر را اضافه میکنیم :
;()frm=new Form1
توسط این خط نمونه سازی شیئ frm را انجام میدهیم یعنی frm را برابر یک نمونه جدید از 
Form1 قرار میدهیم
سپس متد آخر را به این شکل تغییر دهید :
Application.Run(frm);
با این کار شیئ frm که ایجاد کرده ایم به عنوان فرم اصلی نمایش داده میشود و چون frm
از نوع public است در تمام طول برنامه در هر جا خواهیم توانست از آن استفاده کنیم
برای مثال اگر در جایی بخواهیم تا نام Header فرم اصلی را تغییر دهیم کافیست به این
شکل تغییرات را بر روی آن اعمال کنیم
;"Program.frm.Text="Csharphouse
و با این کد تکست Header فرم اصلی تغییر خواهد کرد

توجه داشته باشید :
در مکان کد هایی که باید اضافه کنید دقت داشته باشد و حتما کد ;()frm=new Form1
را بعد از یکی مانده به آخرین متد ( یعنی قبل از متد آخر ) قرار دهید .

نظرات() 
at home std test
دوشنبه 5 تیر 1396 05:25 ق.ظ
بسیار چلیپا از خود نوشتن در حالی که صدایی دلنشین
اصل آیا نه حل و فصل درست با من پس از برخی از زمان.
جایی در سراسر پاراگراف شما قادر به من مؤمن اما فقط برای while.

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

در این رویداد شما که می توانید
انجام من خواهد قطعا بود در گم.
Leopoldo
دوشنبه 25 اردیبهشت 1396 04:34 ق.ظ
Very good blog! Do you have any tips for aspiring writers?

I'm planning to start my own website soon but I'm a little lost
on everything. Would you suggest starting with a free platform like Wordpress or
go for a paid option? There are so many options out there that
I'm completely overwhelmed .. Any tips? Kudos!
manicure
جمعه 1 اردیبهشت 1396 03:58 ب.ظ
Good day very nice blog!! Guy .. Excellent .. Amazing ..
I'll bookmark your site and take the feeds additionally?
I am happy to search out numerous helpful information here in the post, we want develop extra strategies on this regard,
thanks for sharing. . . . . .
BHW
دوشنبه 28 فروردین 1396 10:15 ب.ظ
I was curious if you ever considered changing the structure of your
website? Its very well written; I love what youve got to say.

But maybe you could a little more in the way of content so people could
connect with it better. Youve got an awful lot of text for only having 1 or two
images. Maybe you could space it out better?
فرزاد
شنبه 30 آبان 1394 03:39 ب.ظ
سلام. من اخیرا دهنگام استفاده از visual studioدچار مشکل شدهم. کنترلهایی مانند: textboxو menuو pictureboxو...
به طور دائم چشمک میزنه واجازه دسترسی به property را نمیدهد. اگر کسی میدونه لطفا راه حلش رو بگه هم نرم افزار وهم ویندوز رو کلا عوض کردم
جمعه 4 اردیبهشت 1394 12:25 ق.ظ
روش غلط
امیر
دوشنبه 11 اسفند 1393 09:11 ق.ظ
سلام . خیلی ممنون از مطلب مفیدتون
فقط تعریف اول باید به شکل زیر باشه
public static form1 frm;
جمعه 25 مهر 1393 11:49 ق.ظ
با سلام و خسته نباشید خدمت شما بی نهایت از شما و سایت خیلی خوبتون ممنونم خیلی دنبال این مطلب بودم تا اینکه تو سایت شما پیداش کردم یه دنیا تشکر
 
لبخندناراحتچشمک
نیشخندبغلسوال
قلبخجالتزبان
ماچتعجبعصبانی
عینکشیطانگریه
خندهقهقههخداحافظ
سبزقهرهورا
دستگلتفکر

آمار وبلاگ

  • کل بازدید :
  • بازدید امروز :
  • بازدید دیروز :
  • بازدید این ماه :
  • بازدید ماه قبل :
  • تعداد نویسندگان :
  • تعداد کل پست ها :
  • آخرین بازدید :
  • آخرین بروز رسانی :