صفحه 1 از 2 12 آخرآخر
نمایش نتایج 1 تا 40 از 42

نام تاپیک: نحوه ی ارتباط و پاس كردن مقادير ميان چند فرم ويندوز

  1. #1

    Question نحوه ی ارتباط و پاس كردن مقادير ميان چند فرم ويندوز

    میخوام بین کنترلها توی فرمهای مختلف ارتباط برقرار کنم.مثلا چطوری میتونم محتویات یه textbox در یه فرم رو در یه textbox توی یه فرم دیگه چاپ کنم.
    لطفا راهنمایی کنید.متشکرم.

  2. #2
    با سلام
    اصلا نیازی به استفاده از بانک نیست. شما میخواهید فرم شما یک یا چند پارامتر را به فرم بعدی پاس کند برای این کار باید Constructor فرم دوم تغییر یابد و پارامتر بگیرد. constructor یک فرم یک متد Public می باشد که هم نام فرم میباشد. درون آن InitializeComponent هم فراخوانی می گردد.بجای دو پرانتز خالی باید نوع و پارامتری که می خواهید به فرم مورد نظر pass شود را مشخص کنید. سپس مقادیر را درون متد به متغییرهای عمومی که درون فرم تعریف کردید نسبت دهید تا همه جا بتونی از اونها استفاده کنی بعنوان مثال فرض کنید من بخواهم یک پارامتر string را به فرم دوم بفرستم. بنابراین در constructor فرم 2 می نویسم

    private string test="";
    public Form2(string p_test)
    {
    //
    // Required for Windows Form Designer support
    //
    test=p_test;
    InitializeComponent();

    //
    // TODO: Add any constructor code after InitializeComponent call
    //
    }

    حال هنگام فراخوانی فرم دوم باید پارامتر به آن پاس شود:

    form2 frm_2=new form2("عبارتی که می خواهید پاس شود");
    frm_2.showdialog();

  3. #3
    کاربر دائمی آواتار hmm
    تاریخ عضویت
    مهر 1382
    محل زندگی
    ایران - یزد
    پست
    1,229

    ارسال مقدار به صفحه دیگه

    سلام،
    میدونم سوال تکراریه ولی تو جوابها هنوز روش مشخصی ارائه نشده
    تو فرم یه grid وجود داره که وقتی سطری انتخاب میشه با زدن کلیدی یه فرم جدید باز میشه و اطلاعات کاملتر او سطر رو تو فرم باز شده جدید نشون میده حالا چطوری مقدار کلید ردیف grid انتخابی رو به فرم جدید پاس کنم

  4. #4
    نقل قول نوشته شده توسط hmm
    سلام،
    میدونم سوال تکراریه ولی تو جوابها هنوز روش مشخصی ارائه نشده
    تو فرم یه grid وجود داره که وقتی سطری انتخاب میشه با زدن کلیدی یه فرم جدید باز میشه و اطلاعات کاملتر او سطر رو تو فرم باز شده جدید نشون میده حالا چطوری مقدار کلید ردیف grid انتخابی رو به فرم جدید پاس کنم
    در کلاس مربوط به فرم دوم ات یک متغیر تعریف کن و در فرم اول قبل از تشکیل شیء نمونه از کلاس فرم دوم جهت نمایش بر روی مونیتور ، مقدار این متغیر رو نیز Set کن!

  5. #5
    کاربر دائمی آواتار ali_kolahdoozan
    تاریخ عضویت
    بهمن 1384
    محل زندگی
    اون سر دنیا
    پست
    1,631
    modifyers اون شئی رو public کن (درون property حل می شه

  6. #6
    سازندۀ فرم دوم رو طوری تغییر بده که یک متغیر (از هر نوعی که میخوای) رو به عنوان پارامتر بگیره ، بعد در هنگام ایجاد یک شی جدید از فرم دوم ، اون مقداری رو که میخوای انتقال بدی ، به عنوان پارامتر سازنده منتقل کن.
    We work in the dark, we do what we can, we give what we have.
    Our doubt is our passion and our passion is our task.
    The rest is the madness of art

  7. #7
    کاربر دائمی آواتار hmm
    تاریخ عضویت
    مهر 1382
    محل زندگی
    ایران - یزد
    پست
    1,229
    نقل قول نوشته شده توسط mehdi311ggg
    سازندۀ فرم دوم رو طوری تغییر بده که یک متغیر (از هر نوعی که میخوای) رو به عنوان پارامتر بگیره ، بعد در هنگام ایجاد یک شی جدید از فرم دوم ، اون مقداری رو که میخوای انتقال بدی ، به عنوان پارامتر سازنده منتقل کن.
    نقل قول نوشته شده توسط mehranFX
    در کلاس مربوط به فرم دوم ات یک متغیر تعریف کن و در فرم اول قبل از تشکیل شیء نمونه از کلاس فرم دوم جهت نمایش بر روی مونیتور ، مقدار این متغیر رو نیز Set کن!
    اینجاست که ترجمه متون بلاد بیگانه کمر برنامه نویس رو میشکنه!
    دوستان اگه میتونن یک خط کدش رو بنویسن
    البته لطف میکنن

  8. #8

    Angry

    حاجی ، من از جایی ترجمه نکردم ، فکر کردم انقدر برنامه نویسی بلدی که با یه نیش نکته ، خودت تا آخرش رو بخونی.
    این sample رو دانلود کن ، با کلیک روی button1 ، اطلاعات ردیف انتخاب شده به فرم دوم منتقل میشه ، حالا اونجا دست خودته که چیکار می کنی باهاش.
    (من به عنوان مثال Text فرم دوم رو مساوی کلید اصلی اون ردیف انتخاب شده قرار دادم)
    آخرین ویرایش به وسیله Mehdi Asgari : شنبه 10 اسفند 1387 در 13:54 عصر
    We work in the dark, we do what we can, we give what we have.
    Our doubt is our passion and our passion is our task.
    The rest is the madness of art

  9. #9
    کاربر دائمی آواتار hmm
    تاریخ عضویت
    مهر 1382
    محل زندگی
    ایران - یزد
    پست
    1,229
    سلام؛
    ببین "سید" سوالی کردم جوابش رو دادی ازت ممنونم ولی...
    لازم نیست تعداد پروژه های که با دات نت نوشتم رو بگم ولی میتونی به پاسخ حقیر که به سوالات بعضی از دوستان دادم توجه کنی

    جواب این سوالات رو سالها قبل از العان میدونستم!

    ولی هدف من از طرح این سوال و این سوال و این سوال این بود که بدونم چقدر افراد این بخش تونستن مفاهیم ابتدایی دات نت رو بفهمند و اگه عمری بود تا آخر ماه یه جمع بندی کلی خدمت اعضا میدم .
    بهرحال سعی کن یا لطف کنی و به سوالات بقیه با کمال ادب جواب بدی یا لطف کن و اصلا جواب نده!
    واژه های بکار گرفته توسط شما و بیشتر mehranFX جوبه ولی بدرد کسی که اول راه دات نته نمیخوره خواستم تو پست قبلیم اینو بصورت غیر مشهود بگم که این شیوه پاسخ برای هم رده ها خوبه نه برای مبتدیها !
    بهرحال از پاسخت ممنون
    آخرین ویرایش به وسیله hmm : شنبه 13 اسفند 1384 در 07:51 صبح

  10. #10

    فرستادن مقدار به سازنده فرم دوم

    سلام من میخواستم بدونم که چطوری بدون استفاده از متد show() یک مقدار را به فرم دوم میفرستید و چطوری فرم را نمایش میدهید؟

  11. #11
    کاربر دائمی آواتار habedijoo
    تاریخ عضویت
    اردیبهشت 1384
    محل زندگی
    تهران
    پست
    538
    سلام
    یه مثال خیلی ساده برات گذاشتم . امیدوارم منظورت همین باشه .
    فایل های ضمیمه فایل های ضمیمه

  12. #12

    ارتباط بین فرها؟؟؟؟؟؟؟؟

    ببخشید اگر این سوال کمی تکراری است ولی من هنوز جواب مشخصی برای آن پیدا نکردم
    فرض؟ فرم١ در ابتدای برنامه اجرا میشود و فرمهای٢و٣ توسط فرم١ باز میشوند و مسلما فرم١ به فرمهای٢و٣ دسترسی دارد
    سوال؟ فرم٢ چگونه میتواند به فرمهای١و٣ دسترسی داشته باشد

    static
    void Main()
    {
    Application.Run(newForm1());
    }

    private
    void Form1_Load(object sender, EventArgs e)
    {
    Form2 form2 = newForm2();
    Form3 form3 = newForm3();
    form2.Show();
    form3.Show();
    }

    آخرین ویرایش به وسیله mahani : جمعه 20 مرداد 1385 در 16:40 عصر

  13. #13

    Thumbs up

    publicstatic Form1 MainForm;
    staticvoid Main()
    {
    MainForm =
    new Form1();
    Application.Run(MainForm);
    }


    ...(anywehere) [Namespace].MainForm.TextBox1.Text...

  14. #14

    بیان یک روش جالب برای ارتباط بین فرم ها

    ابتدا یک کلاس به برنامه اضافه می کنید مثلا به نام myConfig بعدش فرض کنید در برنامتون 100 تا فرم دارید که می خواهید از آخری به اولی و از اولی به آخری پارامتر پاس کنید یا هر کاری که دلتون خواست را انجام بدید مثلا از فرم آخری فرم اولی را مینیمایز کنید.

    حال داخل کلاسی که ساختید به تعداد فرم هاتون متغیری استاتیک از نوع آن فرم بسازید به شکل زیر
    public static f1 Form1;

    و برای فرم های بعدی هم به همین صورت مثلا
    public static f100 Form100;

    حالا هرجا خواستید یکی از فرم ها را از داخل یه فرم دیگه ظاهر کنید کد زیر را بنویسید
    مثلا
    Config.f1 = new Form1();

    Config.f1.Show();


    حالا فرض کنید می خواهید از فرم آخری فرم اولی یا وسطی را رنگش را عوض کنید خوب خیلی راحته به شکل زیر عمل کنید
    Config.f1.BackColor=Red;


    دقت کنید اگه می خواهید به اشیائ درون خود فرم ها هم دسترسی داشته باشد باید خاصیت modifiers
    آنها را به حالت public درآورید

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

  15. #15
    به به !
    میشه بگید چه لزومی داره به همه فرم ها اون هم اینطوری دسترسی داشته باشیم ؟

    البته ارتباط بین فرم ها حتما لازمه ، ولی این طوری که همون برنامه نویسی Modular بهتر بود دیگه چه نیازی به OOP بود، شاید بهتر بود به ازای همه کلاس های دات نت فریمورک متغییر استاتیک تعریف میکردند ،بعدش این new رو حذف می کردن تا ملت این همه عذاب نکشن ؟

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

  16. #16
    محروم شده
    تاریخ عضویت
    اردیبهشت 1386
    پست
    193
    نقل قول نوشته شده توسط hamid_isf_1360 مشاهده تاپیک
    ابتدا یک کلاس به برنامه اضافه می کنید مثلا به نام myConfig بعدش فرض کنید در برنامتون 100 تا فرم دارید که می خواهید از آخری به اولی و از اولی به آخری پارامتر پاس کنید یا هر کاری که دلتون خواست را انجام بدید مثلا از فرم آخری فرم اولی را مینیمایز کنید.


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

    public static f1 Form1;

    و برای فرم های بعدی هم به همین صورت مثلا

    public static f100 Form100;

    حالا هرجا خواستید یکی از فرم ها را از داخل یه فرم دیگه ظاهر کنید کد زیر را بنویسید
    مثلا

    Config.f1 = new Form1();

    Config.f1.Show();


    حالا فرض کنید می خواهید از فرم آخری فرم اولی یا وسطی را رنگش را عوض کنید خوب خیلی راحته به شکل زیر عمل کنید
    Config.f1.BackColor=Red;


    دقت کنید اگه می خواهید به اشیائ درون خود فرم ها هم دسترسی داشته باشد باید خاصیت modifiers
    آنها را به حالت public درآورید

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

    **** دوست عزیز، لطفا با مزاح کردن به دیگران بی احرامی نکنید. ممنون ****

    ببینم اونوقت میشه بگین private و protect و امثال اینا که برای اعمال کپسوله سازی کد ها(encapsulation) هستند به چه درد می خوره؟

    اسفاده از static خیلی خوبه ولی نه برای یک همچین کاری عزیز

    البته اشکالی نداره خوب فروم به همین درد میخوره که ادم اشکالاتش برطرف بشه
    موفق باشید
    مهدی کیانی
    آخرین ویرایش به وسیله omid_Ahmadi : چهارشنبه 02 خرداد 1386 در 17:56 عصر

  17. #17
    بسم رب العشق

    این روش برای این خوبه که شما در روش های عادی مجبورید وقتی می خواهید مثلا از
    فرم دوم که بوسیله فرم اول ایجاد شده رنگ تکست باکس فرم اول را تغییر بدید نمی تونید.
    ----------------------------------------------------------------------------------------------
    روش owner و دیگر روش های دیگه هم هست ولی این خیلی راحت تره.
    ----------------------------------------------------------------------------------------------
    در ضمن استاتیک تعریف شده که نیاز نداشته باشیم از کلاس new بسازیم.
    ----------------------------------------------------------------------------------------------
    اما با این روش تمام فرمهای برنامه بصورت سیال در میاند و هر کاری که خواستید می تونید
    بین آنها انجام بدید , راستی اگه بازم دیدید این روش به دردتون نمی خوره یه روش راحتر از این
    بیان کنید همه استفاده می کنیم
    ----------------------------------------------------------------------------------------------
    اینجا اومدیم یاد بگیریم
    و آقای کیانی عزیز من قصد مزاح و بی احترامی به کسی را ندارم

    یا علی

  18. #18
    کاربر دائمی آواتار Sorenaa_s
    تاریخ عضویت
    اردیبهشت 1386
    سن
    43
    پست
    115
    نقل قول نوشته شده توسط hamid_isf_1360 مشاهده تاپیک
    بسم رب العشق

    این روش برای این خوبه که شما در روش های عادی مجبورید وقتی می خواهید مثلا از
    فرم دوم که بوسیله فرم اول ایجاد شده رنگ تکست باکس فرم اول را تغییر بدید نمی تونید.
    ----------------------------------------------------------------------------------------------
    روش owner و دیگر روش های دیگه هم هست ولی این خیلی راحت تره.
    ----------------------------------------------------------------------------------------------
    در ضمن استاتیک تعریف شده که نیاز نداشته باشیم از کلاس new بسازیم.
    ----------------------------------------------------------------------------------------------
    اما با این روش تمام فرمهای برنامه بصورت سیال در میاند و هر کاری که خواستید می تونید
    بین آنها انجام بدید , راستی اگه بازم دیدید این روش به دردتون نمی خوره یه روش راحتر از این
    بیان کنید همه استفاده می کنیم
    ----------------------------------------------------------------------------------------------
    اینجا اومدیم یاد بگیریم
    و آقای کیانی عزیز من قصد مزاح و بی احترامی به کسی را ندارم

    یا علی
    ولی دوست عزیز به نظر من این روش هم Encapsulation و هم Abstraction رو نقض می کنه.

  19. #19
    نقل قول نوشته شده توسط hamid_isf_1360 مشاهده تاپیک
    بسم رب العشق

    این روش برای این خوبه که شما در روش های عادی مجبورید وقتی می خواهید مثلا از
    فرم دوم که بوسیله فرم اول ایجاد شده رنگ تکست باکس فرم اول را تغییر بدید نمی تونید.
    ----------------------------------------------------------------------------------------------
    روش owner و دیگر روش های دیگه هم هست ولی این خیلی راحت تره.
    ----------------------------------------------------------------------------------------------
    در ضمن استاتیک تعریف شده که نیاز نداشته باشیم از کلاس new بسازیم.
    ----------------------------------------------------------------------------------------------
    اما با این روش تمام فرمهای برنامه بصورت سیال در میاند و هر کاری که خواستید می تونید
    بین آنها انجام بدید , راستی اگه بازم دیدید این روش به دردتون نمی خوره یه روش راحتر از این
    بیان کنید همه استفاده می کنیم
    ----------------------------------------------------------------------------------------------
    یا علی
    اصلا بحث به درد بخور بودن و راحتی این روش نیست، بحث سر اینه که این روش شما بسیاری از مطالبی که در برنامه نویسی شی گرا وجود دارد را نقض می کند!

    یعنی قوانینی که در OOP در نهایت به سود برنامه نویس هستند در این روش نادیده گرفته میشن !

    در OOP هر کلاس به عنوان یک جعبه سیاه در نظر گرفته میشه که از طریق پارامترها ومتد ها با خارج ارتباط داره نه از طریق در اختیار قرار دادن اعضای داخلیش به طور مستقیم(public)!

    در ضمن Owner با این روش هیچ ربطی با هم ندارند ، Owner صرفا یک ارجاع به شی پدر هستش ،ولی این طوری شما یک شی جدید ایجاد میکنید.

    این روش ممکنه کار راه بنداز باشه ولی صحیح نیست!

  20. #20
    @ hamid_isf_1360:

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

    موفق باشید.

  21. #21
    دوستان عزیز
    هر برنامه نویس برای نوشتن برنامه هاش از روش هایی که ممکن منحصر به خودش باشه استفاده می کنه و تا زمانی که این روش ها Bug ای در برنامش ایجاد نکرده حتی اگه قوانین OOP رو هم نقض کنه نمیشه به فکر اون برنامه نویس ایراد گرفت ...
    پس سعی کنید یه ذره با هم مهربون تر باشید و اگر هم می خواهید انتقادی بکنید طوری اینکار رو نکنید که طرف یک سپر و شمشیر بگیره دستش از خودش دفاع کنه می تونید از ادبیات بهتری برای اینکار استفاده کنید تا اون طرف هم از پستتون در جهت ارتقا, سطح علمیش استفاده کنه ...

    در ضمن این روشی که ایشون مطرح کردن برای برنامه نویسان مبتدی و کسانی که با OOP آشنایی زیادی ندارن بسیار مفیده

  22. #22
    هر برنامه نویس برای نوشتن برنامه هاش از روش هایی که ممکن منحصر به خودش باشه استفاده می کنه و تا زمانی که این روش ها Bug ای در برنامش ایجاد نکرده حتی اگه قوانین OOP رو هم نقض کنه نمیشه به فکر اون برنامه نویس ایراد گرفت ...
    پس سعی کنید یه ذره با هم مهربون تر باشید و اگر هم می خواهید انتقادی بکنید طوری اینکار رو نکنید که طرف یک سپر و شمشیر بگیره دستش از خودش دفاع کنه می تونید از ادبیات بهتری برای اینکار استفاده کنید تا اون طرف هم از پستتون در جهت ارتقا, سطح علمیش استفاده کنه ...
    تقریباً در هیچ پستی از این تاپیک این مورد نقض نشده، فقط چون همه افرادی که نظر دادن، مخالف بودن، این حس ایجاد شده که اون فرد داره تحقیر میشه. پس بهتره دیگه در این مورد صحبت نشه.

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

  23. #23
    می تونید یک متد Public در فرمتون بسازید که با صدا زدن آن ، کار مورد نظرتون رو براتون انجام بده.

  24. #24
    باتشکر از night_fall2 عزیز و فعال
    با استفاده ازز Singleton Pattern می تونید به منظورتون برسید. از لینک زیر کمک بگیرید
    https://barnamenevis.org/showth...ight=singleton

  25. #25
    کاربر دائمی آواتار amirferdowsi
    تاریخ عضویت
    فروردین 1385
    محل زندگی
    تهران
    پست
    312
    سلام
    منم یک همچنین مشکلی رو دارم به این صورت که یک فرم دارم که توسط اون اطلاعات پرسنل گرفته میشه و اون رو در بانک اطلاعاتی ذخیره می کنه و فرم دیگر هم یک کنترل دیتا گرید دارم که اون اطلاعات رو نمایش میده ، حالا من می خوام زمانی که هر دو فرم باز هستند اگر در فرم اول اطلاعات جدیدی وارد شد باز زدن دکمه بعد از ثبت شدن اطلاعات در بانک اطلاعاتی ، دیتاگریدی که در فرم دوم من هست دوباره Bind بشه و اطلاعات جدید رو نمایش بده .
    ممنون میشم که در این زمینه من رو راهنمایی فرمائید.

  26. #26
    من هم یه همچین مشکلی دارم ،ممنون میشم راهنمایی کنید .
    دلیل اینکه می خوام اینکار رو بکنم:
    من در یه فرمم یه button به نام edit دارم که وقتی کاربر کلیک میکنه اطلاعاتی که قبلا وارد کرده باید توی فرم دیگه در textbox های مربوطه نمایش داده بشه،تا با خوندن اطلاعات قبلی اگه خواست امکان ویرایش داشته باشه.
    حالا من تو رویداد کلیک مربوط به button ،متدی که اطلاعات رو از db می گیره نوشتم ولی به textboxهای فرم بعدی دسترسی ندارم تا بتونم پرشون کنم!

  27. #27
    این لینک رو هم ببینید :
    https://barnamenevis.org/showthread.php?p=446800
    ...مرا به خانه ام ببر، اگرچه خانه؛ خانه نیست

  28. #28
    نقل قول نوشته شده توسط fatemeh rahimi مشاهده تاپیک
    من هم یه همچین مشکلی دارم ،ممنون میشم راهنمایی کنید .
    دلیل اینکه می خوام اینکار رو بکنم:
    من در یه فرمم یه button به نام edit دارم که وقتی کاربر کلیک میکنه اطلاعاتی که قبلا وارد کرده باید توی فرم دیگه در textbox های مربوطه نمایش داده بشه،تا با خوندن اطلاعات قبلی اگه خواست امکان ویرایش داشته باشه.
    حالا من تو رویداد کلیک مربوط به button ،متدی که اطلاعات رو از db می گیره نوشتم ولی به textboxهای فرم بعدی دسترسی ندارم تا بتونم پرشون کنم!
    سلام

    دوستانی که معمولا اینگونه مشکلات را دارا هستند اگر به این نکته ای که میگم دقت کنند دیگه هیچ وقت به دنبال اینگونه سوالات برای پاسخ به مشکلاتشون نیستند

    نکته:
    برای ایجاد ارتباط بین آبجکت های مختلف در اینگونه مسائل فقط و فقط به ردو بدل کردن داده ها فکر کنید نه به رد وبدل کردن خود آبجکت ها

    مشکل اکثر دوستان اینه که وقتی میخوان به داده های یه آبجکت دیگه دسترسی پیدا کنند فورا ذهنشون را درگیر این موضوع می کنند که چگونه می شه کنترل آبجکت دیگه را در اختیار گرفت. اگر به جای دسترسی به خود ابجکت به فرستادن داده ها بین آبجکت ها فکر کنید اکثر مشکلاتتون حل میشه

    نکته 2:
    استفاده از property ها یکی از بهترین گزینه ها و در عین حال از ساده ترین گزینه ها برای ردو بدل کردن داده ها بین آبجکت ها می باشد


    در ادامه یکی دو تا مثال می زنم تا با این مفاهیم بیشتر آشنا بشین و امید به اینکه در آینده اینگونه سوالات کم بشه و تمرکز بیشتری در حل مسائل و روش هایی که به دست میارین بکنین

    مثال اول
    فرض کنید 2 تا فرم دارین که به صورت زیر طراحی کردین
    در فرم 1 یک button دارین که با کلیک کردن بر روی اون فرم دومی نشان داده خواهد شد و علاو بر اون یک داده هم به فرم دوم پاس خواهیم داد
    این داده هر چیزی می تونه باشه. از یک رشته ساده گرفته تا یه مجموعه داده ....

    در این مثال فرض می کنیم که یک رشته را از فرم 1 به فرم 2 پاس میدیم
    در فرم دوم هم یک button دارین که با کلیک کردن بر روی اون رشته گرفته شده از فرم 1 را نشون میده

    کلاس فرم 1 به صورت زیر خواهد بود





    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;

    namespace WindowsApplication1
    {
    public partial class Form1 : Form
    {
    public Form1()
    {
    InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
    Form2 newFrm2 = new Form2(this.Text);
    newFrm2.ShowDialog();
    }
    }
    }






    کلاس فرم 2 هم به این صورت خواهد بود




    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;

    namespace WindowsApplication1
    {
    public partial class Form2 : Form
    {
    string localString = string.Empty;

    public Form2(string str)
    {
    InitializeComponent();
    localString = str;
    }

    private void button1_Click(object sender, EventArgs e)
    {
    MessageBox.Show("I Recived Form \n"+localString);
    }


    }
    }






    همانطور که میبینید در Constructor فرم 2 یک آرگومان از جنس string قرار دااده شده است. به این معنی که هر آبجکتی که از کلاس فرم 2 یک نمونه ایجاد می کنه بایستی یک مقدار string هم به اون پاس بده

    در رویداد کلیک Button در فرم 1 ابتدا یک نمونه از فرم 2 ایجاد شده و مقدار text مربوط به فرم 1 به اون پاس داده شده. با این عمل و با کدی که بعد از خط InitializeComponent در Constructor فرم 2 نوشته شده یعنی کد



    localString = str;



    مقدار رشته ای که از فرم 1 دریافت شده را در متغیر localString که در فرم 2 تعریف شده است، قرار می گیرد. حال متغیر localString در هر کجای فرم 2 که بخواین قابل دسترسی است

    در رویداد کلیلکbutton در فرم 2 هم این مقدار نشون داده میشه

    ************************************************** **
    در این مثال بدون استفاده از property ها این کار انجام گرفت
    اما اگر تعداد داده ها بیشتر باشن توصیه می شه که از این روش استفاده نشه

    در ادامه مثال فوق را با استفاده از property ها انجام میدیم

    کلاس فرم 2به صورت زیر خواهد بود



    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;

    namespace WindowsApplication1
    {
    public partial class Form2 : Form
    {
    string passedParameter;

    public string PassedParameter
    {
    get { return passedParameter; }
    set { passedParameter = value; }
    }

    public Form2()
    {
    InitializeComponent();

    }



    private void button1_Click(object sender, EventArgs e)
    {
    MessageBox.Show("I Recived Form \n"+passedParameter);
    }


    }
    }



    در این حالت تغییری در Constructor فرم 2 به وجود نمیاریم بلکه یک property به نام PassedParameter تعریف کردی ایم که توسط این property می تونیم داده هایی را از آبجکت های دیگه (در اینجا کلاس فرم 1) دریافت کنیم

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



    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;

    namespace WindowsApplication1
    {
    public partial class Form1 : Form
    {
    public Form1()
    {
    InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
    Form2 newFrm2 = new Form2();
    newFrm2.PassedParameter = this.Text;
    newFrm2.ShowDialog();
    }
    }
    }




    همانطور که می بینید در رویداد کلیک دکمه در فرم 1 پس از نمونه گیری از فرم 2 به خاصیت PassedParameter از این فرم دسترسی پیدا کردیم و مقدار Text مربوط به فرم 1 را در این property قرار دادیم

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



    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;

    namespace WindowsApplication1
    {
    public partial class Form2 : Form
    {
    public string passedParameter;



    public Form2()
    {
    InitializeComponent();

    }



    private void button1_Click(object sender, EventArgs e)
    {
    MessageBox.Show("I Recived Form \n"+passedParameter);
    }


    }
    }



    یعنی به جای تعریف property خود متغیر را به صورت public تعریف می کنند
    درست است که با این روش هم میشه به مقدار passedParameter دسترسی داشت اما در این روش اصل Encapsulation که یکی از اصول مهم شی گرایی است زیر سوال میره و استفاده از این نوع حرکات در زبانی مثل سی شارپ که به قول بعضیا نطفش را با OOP بستن کار درستی نیست


    فعلا خسته شدم دیگه حال ندارم بنویسم
    ایشالا در ادامه حسش اومد ،نحوه دسترسی به اطلاعات فرم 2 در فرم 1 را با همین property ها (که خیلی میگن نمیشه) را خواهم گفت
    همچنین دسترسی به کنترل های آبجکت های دیگه و تغییر دادن خواص اونا به شکلی که OOP هم زیر سوال نره را با همین Property ها خواهم گفت

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

    استفاده ویاد گیری Pattern هایی همچون Singeltone برای ایجاد تنها یک نمونه از یک آبجکت (که باز مشکل خیلی از دوستانه) یا MVC که دنیایی هست واسه خودش و ... نیز توصیه میشه
    امید وارم دوستان خوبمون من جمله سرکار خانم fateme rahimi بایستی فهمیده باشن که چگونه باید مشکلشون را حل کنند

    دوستان اگه سوالی داشتن می تونن با ایمیل بپرسن


    موفق باشید

  29. #29
    کاربر دائمی آواتار اَرژنگ
    تاریخ عضویت
    آبان 1384
    محل زندگی
    arjang8000@gmail.com
    پست
    2,736
    یک نکته:
    PassedParameter برایه نامگذاری پروپرتی درست نیست. طرز تفکر نباید به این باشد که از بیرون چی آمده، ایده انکپسولیشن این است که محلی فکر کنیم.
    به جایه PassedParameter ، نامه پروپرتی باید برایه کلاس معنی بده، اسمه بهتر MessageText و یا هر چیزه دیگری که برایه کلاس معنی دارد بهتر است.

    در ضمن جواب جناب رضوی که فرمودند : "می تونید یک متد Public در فرمتون بسازید که با صدا زدن آن ، کار مورد نظرتون رو براتون انجام بده" از نظر برنامه نویسی شئیگرائی کاملا درست است.

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

  30. #30
    نقل قول نوشته شده توسط اَرژنگ مشاهده تاپیک
    یک نکته:
    PassedParameter برایه نامگذاری پروپرتی درست نیست. طرز تفکر نباید به این باشد که از بیرون چی آمده، ایده انکپسولیشن این است که محلی فکر کنیم.
    به جایه PassedParameter ، نامه پروپرتی باید برایه کلاس معنی بده، اسمه بهتر MessageText و یا هر چیزه دیگری که برایه کلاس معنی دارد بهتر است.

    در ضمن جواب جناب رضوی که فرمودند : "می تونید یک متد Public در فرمتون بسازید که با صدا زدن آن ، کار مورد نظرتون رو براتون انجام بده" از نظر برنامه نویسی شئیگرائی کاملا درست است.

    با تشکر از نایت فال ۲ برایه این مقاله، این باید جزوه اعلانات این انجمن در بالا میخ‌ بشه.
    دوست عزیز ممنون از توجهتون اما تنها دلیل اینکه این نام برای این property انتخاب شده این بود که دوستانی که اصلا نمی دونن propertry جیه و به چه دردی میخوره متوجه بشن که این در واقع مانند یک پارامتر واسط که کار اصلیش انتقال داده بین دو فرم 1 و 2 هست

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

    مجموعه آموزشی Asp.Net Core Mvc کاملا به زبان فارسی(21 ماژول و 15 ساعت فیلم آموزشی همراه با سورس کامل تمرینات و پروژه عملی انجام شده در طول آموزشی)
    مشاهده جزئیات در آدرس http://www.mkiani.ir/blog/content/53084


    وب سایت : http://www.mkiani.ir
    پست الکترونیک : mkiani3000@gmail.com

    موفق و پیروز باشید.
    مهدی کیانی


  31. #31
    کاربر دائمی آواتار اَرژنگ
    تاریخ عضویت
    آبان 1384
    محل زندگی
    arjang8000@gmail.com
    پست
    2,736
    اتفاقا نه! نمیشه n تا ایراد به این مقاله گرفت! ولی همیشه میشه یک نکاتی را بهش اضافه کنیم یا به توجه بیاریم که وقتی که کسی میخواد تکمیلترش کند ازشان استفاده کند.

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

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

    اگر واقعا میتونتستم به این مقاله یک اشکال بگیرم خودم یک مقاله مینوشتم ! وگرنه همیشه میشه n تا نکات را به عرض توجه نویسنده آورد. اگر به کتابهایه سطح بالا نگاه بندازید میبینید که یک نویسنده دارد و ۲۰ تا ایراد گیر! حالا اگر به نظر نویسنده نکته جالب بود و میارزید، قاطی کتابش میکند اگر هم که نه متن اصلی همان میماند ولی بقیه هم روش یکمی نظرسنجی میکنند.

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

  32. #32

    مرجع کامل نحوه ی ارتباط بین آبجکت های دو فرم مختلف

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

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

    اسم درست فایل Attach شده هم باید Objectsrelation (ارتباط آبجکت ها)باشه که اشتباها ObjectRelations (ارتباط های آبجکت) نوشته شده
    یه نتکته ای هم در مورد مثال آخر دارم که چون الان فرصت نیست، اومدم می گم چیه
    کوچیک همه شما
    کیانی
    فایل های ضمیمه فایل های ضمیمه
    آخرین ویرایش به وسیله Mahdi.Kiani : دوشنبه 23 اردیبهشت 1387 در 12:52 عصر

    مجموعه آموزشی Asp.Net Core Mvc کاملا به زبان فارسی(21 ماژول و 15 ساعت فیلم آموزشی همراه با سورس کامل تمرینات و پروژه عملی انجام شده در طول آموزشی)
    مشاهده جزئیات در آدرس http://www.mkiani.ir/blog/content/53084


    وب سایت : http://www.mkiani.ir
    پست الکترونیک : mkiani3000@gmail.com

    موفق و پیروز باشید.
    مهدی کیانی


  33. #33
    سلام. اول بگم که خیلی عالی بود . اگه میشد یه بار دیگه تشکر می کردم. انشااله امتحان فوق رو هردومون خوب بدیم.
    حالا یه سوال دارم . توی حالت دوم یعنی ارسال از فرم دوم به فرم اول ، فرم دوم رو showdialog می کنم اما نمی خوام از هیچ دکمه ای توی فرم دوم استفاده کنم. واضحتر بگم : وقتی از فرم اول روی یه textbox کلیک کردم واسم یه لیست توی فرم دیگه باز میشه که showdialog کردم. با کلیک روی هر کدوم از آیتمهای لیست می خوام لیست بسته بشه و آیتم مورد نظرم به textbox از فرم اول اضافه بشه حالا باید چیکار کنم؟

  34. #34
    نقل قول نوشته شده توسط خانم گل مشاهده تاپیک
    سلام. اول بگم که خیلی عالی بود . اگه میشد یه بار دیگه تشکر می کردم. انشااله امتحان فوق رو هردومون خوب بدیم.
    حالا یه سوال دارم . توی حالت دوم یعنی ارسال از فرم دوم به فرم اول ، فرم دوم رو showdialog می کنم اما نمی خوام از هیچ دکمه ای توی فرم دوم استفاده کنم. واضحتر بگم : وقتی از فرم اول روی یه textbox کلیک کردم واسم یه لیست توی فرم دیگه باز میشه که showdialog کردم. با کلیک روی هر کدوم از آیتمهای لیست می خوام لیست بسته بشه و آیتم مورد نظرم به textbox از فرم اول اضافه بشه حالا باید چیکار کنم؟
    سلام
    خواهش می کنم
    فکر کنم شما می خواین یه کاری شبیه به کاری که نرم افزار هلو انجام داده (برای انتخاب از لیست) انجام بدین
    دقت کنید که برای dialog کردن فرم حتما نیاز نیست که دکمه ای با خاصیت dialogResult داشته باشین
    شما می تونین به طور دستی مقدار dialogresult را برای فرم تنظیم کنید مانند کدی زیر



    this.DialogResult = DialogResult.OK;



    کنترل برنامه وقتی به خط فوق برسه فرم را اتوماتیک می بنده

    نکته دیگه اینکه برای باز کردن فرم مربوط به لیست داده ها، استفاده از رویداد کلیک برای textbox جالب به نظر نمی رسه .معمولا یه shoertcut مثل F2 و ... تنظیم می کنند یا اینکه بعضا در رویداد KeyPreess یا keydown مربوط به textbox ، فرم لیست داده ها را show می کنند
    به نظر من استفاده ازF2 و نظیر آن بهتر است

    دو نمونه برنامه براتون میفرستم. برای نمونه ببینید ولی بهینه کردنش با خودتون
    اولی بدون استفاده از dialogresult و دومی با استفاده از dialogrsult
    موفق باشید
    فایل های ضمیمه فایل های ضمیمه

    مجموعه آموزشی Asp.Net Core Mvc کاملا به زبان فارسی(21 ماژول و 15 ساعت فیلم آموزشی همراه با سورس کامل تمرینات و پروژه عملی انجام شده در طول آموزشی)
    مشاهده جزئیات در آدرس http://www.mkiani.ir/blog/content/53084


    وب سایت : http://www.mkiani.ir
    پست الکترونیک : mkiani3000@gmail.com

    موفق و پیروز باشید.
    مهدی کیانی


  35. #35
    کاربر تازه وارد
    تاریخ عضویت
    اردیبهشت 1387
    محل زندگی
    Mashhad
    پست
    32

    نقل قول: ارسال مقدار به صفحه دیگه

    باید یه grid تعریف کنی و اون رو تبدیل به پراپرتی کنی و با استفاده از اون ارتباط برقرار کنی راه دوم که البته خودم هم مطمئن نیستم اینکه متد رو Static تعریف کنی .

  36. #36

    نقل قول: ارسال مقدار به صفحه دیگه

    همون طور كه يكي از دوستان گفته بود با static كردن متغيير
    يه نمونه گذاشتم
    فایل های ضمیمه فایل های ضمیمه

  37. #37
    کاربر تازه وارد
    تاریخ عضویت
    اردیبهشت 1387
    محل زندگی
    Mashhad
    پست
    32

    نقل قول: ارسال مقدار به صفحه دیگه

    نقل قول نوشته شده توسط khoshtip118 مشاهده تاپیک
    همون طور كه يكي از دوستان گفته بود با static كردن متغيير
    يه نمونه گذاشتم
    اینم کامل شده ی برنامه ی این دوستمون
    فایل های ضمیمه فایل های ضمیمه

  38. #38

    نقل قول: نحوه ی ارتباط و پاس كردن مقادير ميان آبجکت های دو فرم

    نقل قول نوشته شده توسط x125x125 مشاهده تاپیک
    اینم کامل شده ی برنامه ی این دوستمون
    نقل قول نوشته شده توسط khoshtip118 مشاهده تاپیک
    همون طور كه يكي از دوستان گفته بود با static كردن متغيير
    يه نمونه گذاشتم
    نقل قول نوشته شده توسط x125x125 مشاهده تاپیک
    باید یه grid تعریف کنی و اون رو تبدیل به پراپرتی کنی و با استفاده از اون ارتباط برقرار کنی راه دوم که البته خودم هم مطمئن نیستم اینکه متد رو Static تعریف کنی .
    https://barnamenevis.org/showpo...9&postcount=28

    https://barnamenevis.org/showpo...6&postcount=32


    این مقاله فارسی را هم بخونید

    موفق باشید

    مجموعه آموزشی Asp.Net Core Mvc کاملا به زبان فارسی(21 ماژول و 15 ساعت فیلم آموزشی همراه با سورس کامل تمرینات و پروژه عملی انجام شده در طول آموزشی)
    مشاهده جزئیات در آدرس http://www.mkiani.ir/blog/content/53084


    وب سایت : http://www.mkiani.ir
    پست الکترونیک : mkiani3000@gmail.com

    موفق و پیروز باشید.
    مهدی کیانی


  39. #39

    نقل قول: نحوه ی ارتباط و پاس كردن مقادير ميان چند فرم ويندوز

    آقاي كياني
    ممنون از راهنمايي شما
    ولي وقتي من مطابق راهنمايي شما عمل مي كنم از فرم نخست هيچكدام از پراپرتي هاي فرم 2 را نمي بينم

    Form GetD = new FrmCPSelector(MyCP_ConnectionString_str,
    "SELECT ORG_ID, ORG_NAME, ACTIVE_FL FROM ORG WHERE ACTIVE_FL = 'Y' ",
    "org",
    "Select Organization", 2,
    "ID", "ORG_ID", "Organization", "ORG_NAME", 1, true);
    if (GetD.ShowDialog() == DialogResult.OK)
    {
    Organization_ID = GetD.NewVal1Id
    Organization_title_ID = GetD.NewVal2_Id;
    }

    متغيرهاي فرم 2

    String NewVal1_str = String.Empty;
    String NewVal2_str = String.Empty;

    خاصيت هاي فرم 2

    publicString NewVal1_Id
    {
    set { NewVal1_str = value; }
    get { return NewVal1_str; }
    }
    publicString NewVal2_Id
    {
    set { NewVal2_str = value; }
    get { return NewVal2_str; }
    }

    همانطور كه در تصوير پيوست ملاحظه مي فرماييد خاصيت ها در ليست نيستند ممكن است راهنمايي بفرماييد
    عکس های ضمیمه عکس های ضمیمه
    آخرین ویرایش به وسیله Mahmoud.Afrad : جمعه 08 مرداد 1395 در 01:56 صبح

  40. #40

    نقل قول: نحوه ی ارتباط و پاس كردن مقادير ميان چند فرم ويندوز

    مشكل حل شد

    using (FrmCPSelector GetD = newFrmCPSelector(MyCP_ConnectionString_str,
    "SELECT ORG_ID, ORG_NAME, ACTIVE_FL FROM ORG WHERE ACTIVE_FL = 'Y' ",
    "org",
    "Select Organization", 2,
    "ID", "ORG_ID", "Organization", "ORG_NAME", 1, true))
    {
    if (GetD.ShowDialog() == DialogResult.OK)
    {
    // Organization_ID = GetD.
    Organization_title_ID = GetD.NewVal2_Id;
    Organization_ID = GetD.NewVal1_Id;
    }
    }// using

    با تشكر از كتاب آقاي هاشميان
    آخرین ویرایش به وسیله Mahmoud.Afrad : جمعه 08 مرداد 1395 در 01:57 صبح

صفحه 1 از 2 12 آخرآخر

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •