نمایش نتایج 1 تا 6 از 6

نام تاپیک: یک متغیر برای چند فرم

  1. #1

    Question یک متغیر برای چند فرم

    سلام
    در برنامه ی خودمون (به زبان C#‎(چندین فرم داریم میخوایم متغیری تعریف کنیم که همه ی فرمها بتونن ازش استفاده کنن کجا و چطوری تعریفش کنیم ؟
    مرسی

  2. #2
    کاربر دائمی آواتار jeus
    تاریخ عضویت
    آبان 1385
    محل زندگی
    لباسام
    پست
    317
    باید public تعریف کنی

  3. #3

    Angry

    نقل قول نوشته شده توسط aliqqq مشاهده تاپیک
    سلام
    در برنامه ی خودمون (به زبان C#‎(چندین فرم داریم میخوایم متغیری تعریف کنیم که همه ی فرمها بتونن ازش استفاده کنن کجا و چطوری تعریفش کنیم ؟
    مرسی

    سلام.
    لطفا اینکار رو نکنید! انجام چنین کاری مطلقا صحیح نیست. شما باید مدلی از Business Entity های خودتون داشته باشید و تغییرات رو روی مدل اعمال کنید. UI باید خودش رو برای گرفتن تغییرات مدل register کرده باشه، هر گاه تغییر در مدل رخ داد، UI مطلع میشه و خودش رو بنا به نیاز به روز می کنه.

    بعنوان مثال Visual Studio رو در نظر بگیرید. وقتی شما در حال ویرایش یه فایل CS دراین محیط هستید و اون فایل رو از Solution Explorer پاک می کنید، پنجره فعال بسته میشه، نام فایل از درخت مربوط به Solution Explorer حذف میشه، منوی اصلی Update میشه و Status bar پیام مناسبی رو بهتون نشون میده و ....

    برای نوشتن چنین چیزی به دو طریق میشه عمل کرد:

    الف . کلیه عملیات رو بصورت رویه ای انجام بدید، یعنی بگید

    1. آیا کاربر فایل رو پاک کرد؟
    2. اگه document مربوط به این فایل باز هستش، اونو ببند.
    3. برو تو treeview و فلان node رو حذف کن.
    4. منوها رو update کن.
    5. statusbar رو update کن
    و و و ....

    ب. بیایید یه مدل بسازید واسه فایلهایی که قرار باهاشون کار کنید. هر کاری که انجام میدین رو این مدل انجام میدین. مثلا وقتی کاربر یه فایل رو پاک میکنه، شما میرید و به مدل میگید که فلان فایل رو پاک کنه. به این ترتیب event ای برای همه اونهایی که مشتاق این event هستند ارسال میشه. مثلا treeview میفهمه که فلان فایل پاک شدش و خودش میدونه که باید بره و فلان Node ور از درخت پاک کنه. وقتی statusbar این event رو گرفت، میدونه که باید بره و خودش رو update کنه و نشون بده که فلان فایل پاک شده و .... در نتیجه، هر کنترل وظیفه خودش رو انجام میده و دیگه مجبور نیستید اونجایی که دارید نودی رو از درخت پاک میکنید، خط بعدش برید و statusbar رو Update کنید! یعنی همه چیز Modular میشه.


    اگر این کارو کنید، دیگه لازم نیست که متغیری از کلاس رو public بذارید که هر کسی بتونه تغییرش بده و در نهایت کلاف سردرگمی درست بشه که مدیریتش بسیار پیچیده باشه.

  4. #4
    نقل قول نوشته شده توسط mehdi6755 مشاهده تاپیک
    سلام.
    لطفا اینکار رو نکنید! انجام چنین کاری مطلقا صحیح نیست. شما باید مدلی از Business Entity های خودتون داشته باشید و تغییرات رو روی مدل اعمال کنید. UI باید خودش رو برای گرفتن تغییرات مدل register کرده باشه، هر گاه تغییر در مدل رخ داد، UI مطلع میشه و خودش رو بنا به نیاز به روز می کنه.

    بعنوان مثال Visual Studio رو در نظر بگیرید. وقتی شما در حال ویرایش یه فایل CS دراین محیط هستید و اون فایل رو از Solution Explorer پاک می کنید، پنجره فعال بسته میشه، نام فایل از درخت مربوط به Solution Explorer حذف میشه، منوی اصلی Update میشه و Status bar پیام مناسبی رو بهتون نشون میده و ....

    برای نوشتن چنین چیزی به دو طریق میشه عمل کرد:

    الف . کلیه عملیات رو بصورت رویه ای انجام بدید، یعنی بگید

    1. آیا کاربر فایل رو پاک کرد؟
    2. اگه document مربوط به این فایل باز هستش، اونو ببند.
    3. برو تو treeview و فلان node رو حذف کن.
    4. منوها رو update کن.
    5. statusbar رو update کن
    و و و ....

    ب. بیایید یه مدل بسازید واسه فایلهایی که قرار باهاشون کار کنید. هر کاری که انجام میدین رو این مدل انجام میدین. مثلا وقتی کاربر یه فایل رو پاک میکنه، شما میرید و به مدل میگید که فلان فایل رو پاک کنه. به این ترتیب event ای برای همه اونهایی که مشتاق این event هستند ارسال میشه. مثلا treeview میفهمه که فلان فایل پاک شدش و خودش میدونه که باید بره و فلان Node ور از درخت پاک کنه. وقتی statusbar این event رو گرفت، میدونه که باید بره و خودش رو update کنه و نشون بده که فلان فایل پاک شده و .... در نتیجه، هر کنترل وظیفه خودش رو انجام میده و دیگه مجبور نیستید اونجایی که دارید نودی رو از درخت پاک میکنید، خط بعدش برید و statusbar رو Update کنید! یعنی همه چیز Modular میشه.


    اگر این کارو کنید، دیگه لازم نیست که متغیری از کلاس رو public بذارید که هر کسی بتونه تغییرش بده و در نهایت کلاف سردرگمی درست بشه که مدیریتش بسیار پیچیده باشه.
    سلام
    میشه لطف کنید و یه مثال عملی در مورد این مطلبی که توضیح دادین بزنین؟ یا لینک خاصی اگه دارین بفرستین
    ممنون

  5. #5
    نقل قول نوشته شده توسط gomnam مشاهده تاپیک
    سلام
    میشه لطف کنید و یه مثال عملی در مورد این مطلبی که توضیح دادین بزنین؟ یا لینک خاصی اگه دارین بفرستین
    ممنون

    سلام.
    راستش فرصت کد نوشتن رو ندارم، اما برای اینکه کاملا متوجه این مساله بشید، باید با Model-View-Controller آشنا بشید. در واقع MVC الگویی به شما ارائه میده که میتونید توسط این الگو و با رعایت قوانینی کاملا ساده از بوجود اومدن بی نظمی در نرم افزار جلوگیری کنید. MVC در زبانهای برنامه نویسی متفاوت بصورتهای متفاوت پیاده سازی میشه، چون هر زبونی قابلیتهای خاص خودش رو داره و حیف بوده که اون قابلیتها در پیاده سازی این الگو استفاده نشه. در نتیجه شما باید کتبی در زمینه MVC و Pattern ها در C#‎ مطالعه کنید.

  6. #6
    کاربر دائمی آواتار mohammad272005
    تاریخ عضویت
    مرداد 1386
    محل زندگی
    تهران
    پست
    639
    نقل قول نوشته شده توسط mehdi6755 مشاهده تاپیک
    سلام.
    لطفا اینکار رو نکنید! انجام چنین کاری مطلقا صحیح نیست.
    دوست من لزومی نداره همیشه از مدل n-layer استفاده کنیم. گاهی یه برنامه داری که واقعا کار بزرگی انجام نمی‏ده.

    به نظر من شما یا یه کلاس internal public بگیر و تو Program ازش instance بگیر و متغیرهای عمومی خودت رو تو کلاست بزار یا از اول این کلاس رو static کن تا حتی نیازی به instance هم نداشته‏باشه. بسته به نیازت یکیشو انتخاب کن.

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

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