PDA

View Full Version : دسترسی به کنترل



farhaneh
سه شنبه 20 مرداد 1388, 00:37 صبح
سلام دوستان. یه سوال دارم.
فرض کنیم تو یه پروژه، از یه کلاس میخوایم به یه کنترل مثل text box دسترسی داشته باشیم. مسلما #c این کنترل رو تو این کلاس نمیشناسه. میخوام بدونم برای دسترسی به این کنترل راهی بجز ارسال مقادیر اون به متد این کلاس هست؟؟؟
ممنون.

hozouri
سه شنبه 20 مرداد 1388, 07:21 صبح
دوست عزیز اگر modifier در تکست باکس رو public کنی در هر جایی می تونی به کنترل دسترسی داشته باشی ...

Sociant
سه شنبه 20 مرداد 1388, 07:32 صبح
فکر کنم آقای کیانی بودن که یه بار سر همین public کردنه کنترل های فرم کلی دعوامون کردن.
دلیلشم اینه که با قواعد شی گرایی تناقض داره!
بعد هم یه مقاله توپ گذاشتن که داخلش چند روش استاندارد واسه این کار رو توضیح داده بودن

مثلا
یکی از راهها اینه که خاصیت Text تکست باکس رو بصورت Property اون هم با get در اختیار کلاسهای دیگه قرار بدین

alireza_tavakol
سه شنبه 20 مرداد 1388, 08:49 صبح
فکر کنم آقای کیانی بودن که یه بار سر همین public کردنه کنترل های فرم کلی دعوامون کردن.
دلیلشم اینه که با قواعد شی گرایی تناقض داره!


احتمالا" منظور جناب آقای کیانی رو کامل برداشت نکردین !

توجه داشته باشین که public نوعی از سطح دسترسی به اعضای کلاس ها می باشد و در برنامه نویسی OOP کاربرد های خواص خود را دارد و هیچ گونه تناقضی در قوانین OOP به وجود نمی آورد ، اما ممکن است ، استفاده از این سطح دسترسی باعث کاهش یافتن امنیت شود و یا به علت دسترسی مستقم باعث به وجود آمدن خطا شود پس بهتر است ( اجباری در کار نیست ) از properties استفاده شود

farhaneh
سه شنبه 20 مرداد 1388, 15:48 عصر
فکر کنم آقای کیانی بودن که یه بار سر همین public کردنه کنترل های فرم کلی دعوامون کردن.
دلیلشم اینه که با قواعد شی گرایی تناقض داره!
بعد هم یه مقاله توپ گذاشتن که داخلش چند روش استاندارد واسه این کار رو توضیح داده بودن

مثلا
یکی از راهها اینه که خاصیت Text تکست باکس رو بصورت Property اون هم با get در اختیار کلاسهای دیگه قرار بدین
اگه ممکنه یه کم بیشتر در مورد این روش توضیح بدید. ممنون میشم اگه یه نمونه کد یا لینک اون مقاله رو برام بذارین.

farhaneh
چهارشنبه 21 مرداد 1388, 01:41 صبح
دوستان اگه ممکنه کمک کنن . مهمه و خیلی عجله دارم.

hozouri
چهارشنبه 21 مرداد 1388, 13:43 عصر
اگر از اون یکی روش می خوای استفاده کنی یه پراپرتی درون فرمی که تکست باکس هست تعریف کن :


private string text;
public static string getText
{
get
{
return textBox1.text;
}
set
{
text=value;
}
}

textBox1_TextChanged(object sender, EventArgs e)
{
text=textBox1.text;
}

bluray
چهارشنبه 21 مرداد 1388, 18:24 عصر
سلام
به نظر میاد تاپیک ها خیلی فعال نباشند .
سوالی داشتم
دوستان من فرم 1 و 2 توی برنامه ام دارم . دارم یه ادیتور اسمبلی رو شبیه سازی می کنم.
فرم یک دستورات رو توی یک ریچ باکس می گیره . حالا می خوام این دستورات در قالب یک رشته در فرم دوم قابل دسترس باشند . کار های زیر رو انجام می دم:
در فرم یک:
کد مربوط به دکمه برای رفتن به فرم دوم:
form2 f2=new form2();
f2.show();
حالا در فرم دوم:
در رویداد فرم لوود:
string all;
در کد مربوط به دکمه :
form 1 f1=new form1();
all=f1.richtextbox.text;
اما بعد از اجرای این دستورات هیچ چیزی داخل all ریخته نمیشه . برنامه حتی خطا هم نمی گیره .
سعی کردم این کار رو با ریختن محتوای چند تا لیبل از فرم یک در چند تا لیبل فرم دو امتحان کنم اما محتوای لیبل ها هم کپی نشدند .به نوعی می شه گفت انگار نه انگار که اتفاقی افتاده . اما برعکس این قضیه انجام میشه . مثلا از داخل فرم یک می تونم اطلاعات فرم دو رو داشته باشم . modify تمام المان ها رو هم روی public تنظیم کردم . اگر تنظیم نکرده بودم اصلا قابل نوشتن نبود این کد .
یا حق
به کمک فوری شما احتیاج دارم .

مهدی فرزاد
چهارشنبه 21 مرداد 1388, 18:50 عصر
سلام
من برای دسترسی به یه کنترل مثلا textBox1 از یک فرم توی یک کلاس مثلا Celass1 از این روش استفاده میکنم توی متد سازنده کلاسم به روش زیر از اون نوع کنترل یه نمونه تعریف میکنم :



Publice Celass1 (TextBox t)
}
this.t 2= t;
{
Private TextBox t2;


بعد هر کدی که برای اون کنترل میخوام توی کلاسم مینویسم
مثلا



this.t2.BackColor = Color.Red;
.
.
...
حالا موقعی که از توی فرمم میخوام یه New از کلاسم بسازم کد زیر رو مینویسم



Celass1 clas = new Celass1(textBox1)

Sociant
چهارشنبه 21 مرداد 1388, 19:42 عصر
احتمالا" منظور جناب آقای کیانی رو کامل برداشت نکردین !

توجه داشته باشین که public نوعی از سطح دسترسی به اعضای کلاس ها می باشد ... ، اما ممکن است ، استفاده از این سطح دسترسی باعث کاهش یافتن امنیت شود و یا به علت دسترسی مستقم باعث به وجود آمدن خطا شود ...

ببینید ، شی گرایی فقط Syntax نیست ، شی گرایی تشکیل شده از یکسری مفاهیم ، که طبق یکی از این مفاهیم (Encapsulation(شما نباید اطلاعات درونی یک کلاس که دیگر کلاسها نیازی به دونستنش ندارن عمومی کنید. اگه شما طبق این مفاهیم عمل نکنید پس قواعد شی گرایی رو رعایت نکردین
مسلما کامپایلر C# از شما ایراد نمیگیره که چرا اینکارو کردین