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

نام تاپیک: دسترسی به متدها و کنترل های Window اصلی

  1. #1

    دسترسی به متدها و کنترل های Window اصلی

    با سلام خدمت دوستان
    من در برنامه ام ( WPFApplicatoni1 ) یک فولدر ایجاد کردم به نام CustomControls و برخی از کنترل های جدید را در این فولدر ایجاد کردم. بنابراین کنترل های ایجاد شده در فضای نام WPFApplicatoni1.CustomControls قرار می گیرند. حال من می خواهم از داخل کنترل های ایجاد شده متدهای Window اصلی را فراخوانی کنم و یا به کنترل های آن(که در فضای نام WPFApplicatoni1 قرار دارند) دسترسی پیدا کنم. می خواستم بدانم روش اصولی برای این کار چیست؟
    با تشکر

  2. #2

    نقل قول: دسترسی به متدها و کنترل های Window اصلی

    سلام
    مثالی رو که من دادم ملاحظه کنید
    البته من این مثال رو بجای استفاده از یوزر کنترل ، از ویندوز استفاده کردم ولی منطقش یکی هست;
    راه های دیگه ای هم برای برقراری ارتباط بین دو یوزر کنترل و یا یک یوزر کنترل با Win هم هست یکیش رو در لینک زیر توضیح دادم

    https://barnamenevis.org/showthread.p...A7-UserControl
    فایل های ضمیمه فایل های ضمیمه
    • نوع فایل: rar EX1.rar‏ (74.3 کیلوبایت, 39 دیدار)

  3. #3

    نقل قول: دسترسی به متدها و کنترل های Window اصلی

    ممنون از راهنمایی شما. من مثال شما را دیدم. اما به نظرم این کار اصلاً اصولی نیست. چون شما در اصل Window1 را به عنوان یک پارامتر به Window2 ارسال کرده اید و Window2 به تمامی فیلدهای public مربوط به Window1 دسترسی دارد و این خلاف مفهوم کپسوله سازی است. در برنامه های WinApplication کاری که در این گونه مواقع می کردیم استفاده از رویدادها بود. حال می خواستم بدانم آیا در WPF نیز روش اصولی همان استفاده از رویدادهاست یا روش بهتری نیز وجود دارد؟
    اما روش Binding بین دو UserControl به نظر می رسد روش منطقی در WPF باشد زمانی که می خواهیم یک پراپرتی از یک UserControl را به یک پراپرتی از UserControl دیگر Bind کنیم. اما آیا می شود با همین روش یک متد از یک UserControl را به یک متد در یک UserControl دیگر Bind کرد؟ مثلاً با کلیک کردم روی یک دکمه در UserControl2 یک متد در UserControl1 اجرا شود؟
    آخرین ویرایش به وسیله smt1383 : چهارشنبه 04 خرداد 1390 در 10:43 صبح

  4. #4

    نقل قول: دسترسی به متدها و کنترل های Window اصلی

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

    در ضمن در مثال من هیچ فیلدی Public نشده بود. من مثال رو فقط برای Button زدم که در WPF به شکل خودکار تمام کنترل های یک پنجره یا یوزر کنترل برای سایر کلاس قابل دسترس هستن

    برای فیلد ها من مثالی نزدم
    شما برای فیلد ها باید از طریق Property این کار رو انجام بدید نه رویداد!!!!( کجا گفته شده برای تغییر یک فیلد و دسترسی به اون باید از رویداد ها استفاده کرد و این اصولی هست؟)
    یعنی با ایجاد یک Property و از طریق اون مقدار یک فیلد رو تغییر بدید (رویداد برای این کار مناسب نیست)

    بهترین روش این هست که شما برای هر یوزر کنترل property ها و Event های مناسب ایجاد کنید و از طریق اون مدیریت ویندوزی رو که این یوزر کنترل در اون قرار میگیره رو در اختیار بگیرید

    نکته اینکه من به شما رو دسترسی داشتن به یک پنجره و یا ویندوز رو به ویندوزی که اونو فراخونی کرده نشون دادم شما میتوند توی ویندوز هرچی رو خواستید public کنید یا نکنید;

    برای روشن شدن مطلب مثال زیر رو ببینید
    من تناقضی در شئی گرا بودن نمی بینم
    فایل های ضمیمه فایل های ضمیمه
    • نوع فایل: rar Ex2.rar‏ (77.4 کیلوبایت, 19 دیدار)
    آخرین ویرایش به وسیله مهدی فرزاد : چهارشنبه 04 خرداد 1390 در 11:01 صبح دلیل: اضافه کردن مثال

  5. #5

    نقل قول: دسترسی به متدها و کنترل های Window اصلی

    نقل قول نوشته شده توسط smt1383 مشاهده تاپیک
    اما روش Binding بین دو UserControl به نظر می رسد روش منطقی در WPF باشد زمانی که می خواهیم یک پراپرتی از یک UserControl را به یک پراپرتی از UserControl دیگر Bind کنیم. اما آیا می شود با همین روش یک متد از یک UserControl را به یک متد در یک UserControl دیگر Bind کرد؟ مثلاً با کلیک کردم روی یک دکمه در UserControl2 یک متد در UserControl1 اجرا شود؟
    دوتا متد Bind نمیشن اگر متدی در یک یوزر کنترل دارید که میخواد در یوزر کنترل دیگه هم اجرا بشه یا میتونید اونو Public کنید ( این اصلا خلاف اصول شئی گرایی نیست دقت کنید ما متد رو public نه فیلد یا سایر متد هایی که ممکنه در اون کلاس باشن و در متد مذکور هم استفاده شده باشن !) یا اینکه برای یوزر کنترل Event تعریف کنید که اون Event متد مورد نظر رو اجرا میکنه و قاعدتن Event تعریف شده Public هست و شما میتونید از طریق این Event کار رو انجام بدید;

  6. #6
    VIP آواتار Amir Oveisi
    تاریخ عضویت
    اسفند 1384
    محل زندگی
    هر جا که حال کنم - فعلا یزد
    پست
    2,604

    نقل قول: دسترسی به متدها و کنترل های Window اصلی

    smt1383
    مثلاً با کلیک کردم روی یک دکمه در UserControl2 یک متد در UserControl1 اجرا شود؟
    علاوه بر توضیحات آقای فرزاد، این نکته رو باید در نظر بگیرید که این جمله ای که نوشتید نشانگر یک منطق اشتباه است.
    هر متد، یک رفتار رو برای یک usercontrol پیاده سازی می کنه و رفتار هر usercontrol مختص اونه و نه دیگری! اینکه شما میخواید از یک usercontrol متدی را از داخل یک usercontrol دیگه فراخوانی کنید به این معنی هست که این رفتار بین این دو usercontrol مشترک هست، پس راه مناسب برای اینکه هر دوی این usercontrol ها این رفتار مشترک رو داشته باشند این هست که شما یک usercontrol پایه داشته باشید و usercontrol های مد نظرتون از اون ارث ببرند، اینطوری هر دو usercontrol شما اون رفتار مشترک رو از usercontrol پایه ارث بردن.

  7. #7

    نقل قول: دسترسی به متدها و کنترل های Window اصلی

    شما مي تونيد يك event به يوزر كنترل اضافه كنيد و زماني كه event رخ داد متدي مورد نظر رو داخل اون فراخواني كنيد. البته در صورتي كه از الگوي mvvm استفاده نمي كنيد

  8. #8

    نقل قول: دسترسی به متدها و کنترل های Window اصلی

    شاید بعضی از دوستان منظور من را درست متوجه نشده باشند. اما با توجه به مطالبی که گفته شد فکر کنم جمع بندی زیر درست باشد:

    1) مثلاً می خواهیم در پنجره دوم اگر شرایط خاصی به وجود آمد، تغییری در کنترل های پنجره اصلی بوجود آید یا متد خاصی در پنجره اصلی اجرا شود. مثلاً متن یک label تغییر کند یا هر تغییر دیگر. برای این کار به نظر می رسد بهترین و اصولی ترین کار استفاده از رویدادها است. یعنی باید در پنجره دوم یک رویدادی تعریف کنیم که در شرایط خاص مورد نظر ما این رویداد Rise شود. پنجره اصلی هم این رویداد را Subscribe کند. در نتیجه هر وقت در پنجره دوم شرایط خاص مورد نظر ما ایجاد شد، این رویداد Rise می شود و پنجره اصلی هم متوجه می شود و می تواند هر کاری را انجام دهد مثلاً تغییری در کنترل ها یا متغیرهای فرم بوجود آورد و یا متد خاصی را اجرا کند.

    2) می خواهیم با ایجاد هر تغییری در یک پراپرتی از پنجره دوم یک پراپرتی ار پنجره اول نیز همان مقدار را بگیرد و بالعکس. به نظر می رسد در WPF بهترین روش Bind کردن دو پراپرتی باشد.

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

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