ورود

View Full Version : سوال: دسترسی و تغییر یک usercontrol از طریق یک usercontrol دیگر



hamidhws
یک شنبه 10 شهریور 1392, 06:48 صبح
سلام دوستان
فرض کنید من 2 تا یوزر کنترل دارم (usercontrol A,usercontrol B)

یوزر کنترل B شامل یک button هست که میخوام وقتی روش کلیک میکنم خاصیت visibility یوزر کنترل A تغییر پیدا کنه

اگه ممکنه یه راه پیشنهاد بدید چطوری اینکارو انجام بدم . ممنون :قلب:

hamidhws
یک شنبه 10 شهریور 1392, 14:42 عصر
دوستان کسی نمیتونه یه کمکی کنه؟ببینید الان مثلا من یه event توی یوزر کنترل B مینویسم وقتی توی خودش صداش میزنم عمل میکنه ولی وقتی از بیرون (از طریق یه کلاس دیگه یا یوزر کنترل دیگه ) صداش میزنم عمل نمیکنه
چیکار باید انجام بدم ؟لطفا راهنمایی کنید :(

hakim22
یک شنبه 10 شهریور 1392, 17:15 عصر
هر UserControl یک کلاس در #C است. برای پاس کاری اطلاعات بین دو کلاس همانطوری که در WinForm عمل میکنید اینجا هم صادق است.
یک روش خوب استفاده از Dependecny Injection از نوع Constructor است. معنیش میشود ایمنکه در متد سازنده ی userControl یک آرگومان جدید از نوع مقداری که میخواهید پاسکاری کنید تعریف کنید.

موقع ساختن UserControl وقتی از new استفاده می کنید مقدار وردی را نیز وارد میکنید.

myUserControl = new userControl(myArg1);


این یکی از روشهاست.

یکی هم اینکه یک کلاس از نوع static تعریف کنید و متغیرهایی درون اون از نوع static تعریف کنید و بعد هر دو usercontrol میتوانند متغیرهای درون این کلاس را بخوانند . (روش استاندارد نیست ، بیشتر دور زدن مسیر است)

اگر با مدل MVVM آشنا هستید روش کمی فرق میکند. بهتره مشخص تر بگید برای چه کاری نیاز دارید !؟

hamidhws
یک شنبه 10 شهریور 1392, 18:52 عصر
ممنون از پاسختون دوست عزیز


یک روش خوب استفاده از Dependecny Injection از نوع Constructor است. معنیش میشود ایمنکه در متد سازنده ی userControl یک آرگومان جدید از نوع مقداری که میخواهید پاسکاری کنید تعریف کنید.

موقع ساختن UserControl وقتی از new استفاده می کنید مقدار وردی را نیز وارد میکنید.
ممنون میشم یکم بیشتر توضیح بدید :قلب:

بهتره مشخص تر بگید برای چه کاری نیاز دارید !؟
من برناممو قسمت بندی کردم و هر قسمت رو بصورت یوزر کنترل در اوردم . برای مثال فرم لاگین یا تک تک فرم های برنامه هرکدام یک یوزر کنترل مجزا هستن . این یوزر کنترل ها در عمل بصورت یکپارچه کنار هم میان . برای نظم بیشتر میخواستم یه کلاس واسط تعریف کنم که هرگونه عملیات مدیریت UI برنامه از طریق اون انجام بشه. برای مثال switchview و... .
مثلا فرض کنید توی یوزر کنترل A یه button هست که با زدن اون مثلا باید رنگ یه grid توی یوزرکنترل B عوض بشه. میخوام همه این کارها از طریق اون کلاس واسط انجام بشه . به نظرتون بهترین راه حل برای این کار چیه؟اگه خواستید بفرمایید بیشتر توضیح میدم

بازم ممنون از کمکتون . واقعا ممنونم :قلب:

hamidhws
دوشنبه 11 شهریور 1392, 12:06 عصر
راستش من قبلا برای اینکار یوزرکنترلم رو به این صورت تعریف میکردم و جواب میداد (توی سیلورلایت 4)
MyUserControl control { get; set; }
بعدش هر تغییری که میدادم لحظه ای انجام میشد
اما الان وقتی اینطوری تعریف میکنم وقتی تغییری میدم کل صفحه سفید میشه!نه فقط صفحه اون یوزرکنترل بلکه تمام کل صفحه سایت!
کسی میدونه مشکل از چیه و یا چیکار باید انجام بدم؟ :(

الان یه پروژه لنگ جواب همین سواله . ممنون میشم یه کمکی کنید خدا خیرتون بده :قلب:

hamidhws
سه شنبه 12 شهریور 1392, 14:34 عصر
الان از یه روش رفتم ولی ارور میده.
یه کلاس واسط تعریف کردم این 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 باید تغییر کنه . ولی ارور میده :
110114

کسی میدونه مشکل چیه؟یا راه حلی به من بده . ممنون میشم واقعا :(

hamidhws
چهارشنبه 13 شهریور 1392, 01:41 صبح
خوشبختانه مشکل حل شد :) کلاس واسط رو از نوع static تعریف کردم مشکل حل شد