سلام دوستان
فرض کنید من 2 تا یوزر کنترل دارم (usercontrol A,usercontrol B)
یوزر کنترل B شامل یک button هست که میخوام وقتی روش کلیک میکنم خاصیت visibility یوزر کنترل A تغییر پیدا کنه
اگه ممکنه یه راه پیشنهاد بدید چطوری اینکارو انجام بدم . ممنون
سلام دوستان
فرض کنید من 2 تا یوزر کنترل دارم (usercontrol A,usercontrol B)
یوزر کنترل B شامل یک button هست که میخوام وقتی روش کلیک میکنم خاصیت visibility یوزر کنترل A تغییر پیدا کنه
اگه ممکنه یه راه پیشنهاد بدید چطوری اینکارو انجام بدم . ممنون
دوستان کسی نمیتونه یه کمکی کنه؟ببینید الان مثلا من یه event توی یوزر کنترل B مینویسم وقتی توی خودش صداش میزنم عمل میکنه ولی وقتی از بیرون (از طریق یه کلاس دیگه یا یوزر کنترل دیگه ) صداش میزنم عمل نمیکنه
چیکار باید انجام بدم ؟لطفا راهنمایی کنید :(
هر UserControl یک کلاس در #C است. برای پاس کاری اطلاعات بین دو کلاس همانطوری که در WinForm عمل میکنید اینجا هم صادق است.
یک روش خوب استفاده از Dependecny Injection از نوع Constructor است. معنیش میشود ایمنکه در متد سازنده ی userControl یک آرگومان جدید از نوع مقداری که میخواهید پاسکاری کنید تعریف کنید.
موقع ساختن UserControl وقتی از new استفاده می کنید مقدار وردی را نیز وارد میکنید.
myUserControl = new userControl(myArg1);
این یکی از روشهاست.
یکی هم اینکه یک کلاس از نوع static تعریف کنید و متغیرهایی درون اون از نوع static تعریف کنید و بعد هر دو usercontrol میتوانند متغیرهای درون این کلاس را بخوانند . (روش استاندارد نیست ، بیشتر دور زدن مسیر است)
اگر با مدل MVVM آشنا هستید روش کمی فرق میکند. بهتره مشخص تر بگید برای چه کاری نیاز دارید !؟
ممنون از پاسختون دوست عزیز
ممنون میشم یکم بیشتر توضیح بدیدیک روش خوب استفاده از Dependecny Injection از نوع Constructor است. معنیش میشود ایمنکه در متد سازنده ی userControl یک آرگومان جدید از نوع مقداری که میخواهید پاسکاری کنید تعریف کنید.
موقع ساختن UserControl وقتی از new استفاده می کنید مقدار وردی را نیز وارد میکنید.
من برناممو قسمت بندی کردم و هر قسمت رو بصورت یوزر کنترل در اوردم . برای مثال فرم لاگین یا تک تک فرم های برنامه هرکدام یک یوزر کنترل مجزا هستن . این یوزر کنترل ها در عمل بصورت یکپارچه کنار هم میان . برای نظم بیشتر میخواستم یه کلاس واسط تعریف کنم که هرگونه عملیات مدیریت UI برنامه از طریق اون انجام بشه. برای مثال switchview و... .بهتره مشخص تر بگید برای چه کاری نیاز دارید !؟
مثلا فرض کنید توی یوزر کنترل A یه button هست که با زدن اون مثلا باید رنگ یه grid توی یوزرکنترل B عوض بشه. میخوام همه این کارها از طریق اون کلاس واسط انجام بشه . به نظرتون بهترین راه حل برای این کار چیه؟اگه خواستید بفرمایید بیشتر توضیح میدم
بازم ممنون از کمکتون . واقعا ممنونم
راستش من قبلا برای اینکار یوزرکنترلم رو به این صورت تعریف میکردم و جواب میداد (توی سیلورلایت 4)
MyUserControl control { get; set; }
بعدش هر تغییری که میدادم لحظه ای انجام میشد
اما الان وقتی اینطوری تعریف میکنم وقتی تغییری میدم کل صفحه سفید میشه!نه فقط صفحه اون یوزرکنترل بلکه تمام کل صفحه سایت!
کسی میدونه مشکل از چیه و یا چیکار باید انجام بدم؟ :(
الان یه پروژه لنگ جواب همین سواله . ممنون میشم یه کمکی کنید خدا خیرتون بده
آخرین ویرایش به وسیله hamidhws : دوشنبه 11 شهریور 1392 در 16:48 عصر
الان از یه روش رفتم ولی ارور میده.
یه کلاس واسط تعریف کردم این event رو توش نوشتم:
public Desktop desktop { get; set; }
public void switchpage()
{
desktop.Opacity = 0.5;
}
بعد اومدم توی یوزر کنترل desktop اینو اضاف کردم :
IRS_UIManagment uimanagment = new IRS_UIManagment();
public Desktop()
{
InitializeComponent();
uimanagment.desktop = this;
}
(IRS_UIManagment همون کلاس واسط هست)
بعد اومدم توی یوزر کنترل B و رویداد switchpage رو صدا زدم . الان مقدار opacity یوزر کنترل desktop باید تغییر کنه . ولی ارور میده :
error.jpg
کسی میدونه مشکل چیه؟یا راه حلی به من بده . ممنون میشم واقعا :(
خوشبختانه مشکل حل شد :) کلاس واسط رو از نوع static تعریف کردم مشکل حل شد