PDA

View Full Version : سوال: صدا زدن یک تابع هنگام تغییر یک خصوصیت یوزرکنترل



goldoon
سه شنبه 24 دی 1392, 08:38 صبح
سلام
من میخاستم یک switchbutton با یوزر کنترل بنویسم
همونطور که می دونید وقتی روی switch-button کلیک میکنیم مقدار اون که یک متغیر بولین است برعکس میشه
حالا من برا کنترل خودم یک پروپرتی تعریف کردم به اسم selectedvalue
حالا میخام داخل متد set این پروپرتی یک تابع بنویسم که با توجه به مقدار انتخاب شده وضعیت نمایش switchbutton را تغیر بده
هر دستور شرطی که در این متد بنویسم ،موقعی که پروژه را کامپایل می کنم و میخام از کنترل استفداه کنم ،به محض استفداه از کنترل ،کل ویژوال هنگ می کنه و باید ریستارت بشه :ناراحت::متعجب:
سوالم اینه:
آیا نمیشه داخل متد های پروپرتی یک کنترل ،تابع نوشت یا حتی یک دستور شرطی؟:متفکر:

Davidd
سه شنبه 24 دی 1392, 15:56 عصر
همونطور كه ميدوني پروپرتیيه چيزي بين متد و فيلد هست؛ هم ميشه مثه فيلد بهش مقدار داد و يا مقدارشو خوند و هم ميشه داخل set و get كد نوشت. پروپرتی معمولا به عنوان دروازه دسترسي به يك فيلد private استفاده ميشه يعني داخل set اين فيلد مقدار دهي ميشه و داخل get فيلد برگردونده ميشه. داخل set و get نميشه دوباره خود پروپرتي استفاده كرد چون تا بينهايت خودشو صدا ميزنه. به عنوان مثال كد زير تا بي نهايت اجرا ميشه:

selectedvalue ‍‌{
get {
if(selectedvalue==true){
/////
}
}
}

اميدوارم حدسم درست باشه.

sagggad
سه شنبه 24 دی 1392, 16:18 عصر
اصلا شما درست منظورت رو توضیح ندادی
منظورتون کدوم متد هست؟
من که مثلا یه متغیر از نوع بولین به اسم bvalue تعریف میکنم و سپس میام در Set اون رو مقدار دهی میکنم(یعنی برابر value میکنم)
بعد داخل Get مینویسم

Return bvalue;

goldoon
سه شنبه 24 دی 1392, 18:34 عصر
همونطور كه ميدوني پروپرتیيه چيزي بين متد و فيلد هست؛ هم ميشه مثه فيلد بهش مقدار داد و يا مقدارشو خوند و هم ميشه داخل set و get كد نوشت. پروپرتی معمولا به عنوان دروازه دسترسي به يك فيلد private استفاده ميشه يعني داخل set اين فيلد مقدار دهي ميشه و داخل get فيلد برگردونده ميشه. داخل set و get نميشه دوباره خود پروپرتي استفاده كرد چون تا بينهايت خودشو صدا ميزنه. به عنوان مثال كد زير تا بي نهايت اجرا ميشه:

selectedvalue ‍‌{
get {
if(selectedvalue==true){
/////
}
}
}

اميدوارم حدسم درست باشه.



selectedvale
{
get{return selectedvalue;}
set{selectedvalue=value;
if(selectedvalue){}
}
}

من قصد نوشتن چنین کدی را داشتم که موفق نشدم
فک کنم همونطور که دوستمون گفتن تو حلقه بینهایت میفته:ناراحت:

Davidd
چهارشنبه 25 دی 1392, 07:31 صبح
selectedvale
{
get{return selectedvalue;}
set{selectedvalue=value;
if(selectedvalue){}
}
}

من قصد نوشتن چنین کدی را داشتم که موفق نشدم
فک کنم همونطور که دوستمون گفتن تو حلقه بینهایت میفته:ناراحت:

شما بايد علاوه بر پروپرتي ؛ يك فيلد تعريف كني كه پرورپرتي دروازه دسترسي به اون باشه و داخل set و get فقط از فيلد استفاده كني :

private bool _selectedvalue; //private feild
selectedvale
{
get{return _selectedvalue;}
set{_selectedvalue=value;
if(_selectedvalue){}
}
}