PDA

View Full Version : دسترسی به اجزاء کامپونتها



iran_ahvaz_sm
دوشنبه 03 مهر 1385, 11:17 صبح
سلام
دوستان من یک dll نوشتم که دوتا لیبل و تکس باکس و .. داره
حالا میخوام در مثلا در فرم به خاصیت Text یکی از تکس باکس های اون dll دسترسی داشته باشم و همینطور دیگر اجزاء

ضمنا کلی وقت برای جستجو صرف کردم جواب نگرفتم

AFSHIN_REFUA
دوشنبه 03 مهر 1385, 11:40 صبح
با سلام بعضی از dll ها میتوانند در toolbox وارد شوند.برای این منظور باید روی tool box کلیک راست کنیم سپس add tab سپس یک tab jadid misazim بعد س÷س رو این tab click راست addremove item و سپس از پنجره باز شده آدرس میدهیم
بعد به toolbox افزوده میشود.بعد مثل یک ابزار معمولی از آن استفاده کنید

titbasoft
دوشنبه 03 مهر 1385, 11:50 صبح
در ساده ترین حالت چیزی شبیه به:

UserControl11.TextBox1.Text = "a word"

اما راه حل اصولی اون تعریف یک پراپرتی و مپ کردن اون به خاصیت text از textbox است:
ساختن پراپرتی برای یوزر کنترل:

Property myText() As String
Get
Return TextBox1.Text
End Get
Set(ByVal Value As String)
TextBox1.Text = Value
End Set
End Property
نحوه صدا زدن اون

UserControl11.myText = "a word"

iran_ahvaz_sm
دوشنبه 03 مهر 1385, 11:52 صبح
با سلام بعضی از dll ها میتوانند در toolbox وارد شوند.برای این منظور باید روی tool box کلیک راست کنیم سپس add tab سپس یک tab jadid misazim بعد س÷س رو این tab click راست addremove item و سپس از پنجره باز شده آدرس میدهیم
بعد به toolbox افزوده میشود.بعد مثل یک ابزار معمولی از آن استفاده کنید


ولی دوست عزیز مشکل من درنمایش آن روی فرم نیست
تمام مراحل فوق انجام شده فقط مشکل در دسترسی به اجزاء اونهاست

iran_ahvaz_sm
دوشنبه 03 مهر 1385, 11:58 صبح
UserControl11.TextBox1.Text = "a word"
خطا میگیره
فقط کنترل و اجزای انو نمایش میده ولی بشون دسترسی نیست

تعریف یک پراپرتی روش خوبیه ولی اگه تعداد اجزاء زیاد باشه چی ؟

titbasoft
دوشنبه 03 مهر 1385, 12:08 عصر
فقط کنترل و اجزای انو نمایش میده ولی بشون دسترسی نیست پیش فرض اسکوپ دسترسی به کنترل ها Friend است، برای دسترسی از خارج ، باید دسترسی Public ست کنید. (در لیست پراپرتی های textbox گزینه Modifier)

این کار پیشنهاد نمیشه و پیشنهاد می کنم روش دوم رو استفاده کنید.

iran_ahvaz_sm
دوشنبه 03 مهر 1385, 12:23 عصر
پیش فرض اسکوپ دسترسی به کنترل ها Friend است، برای دسترسی از خارج ، باید دسترسی Public ست کنید. (در لیست پراپرتی های textbox گزینه Modifier)

این کار پیشنهاد نمیشه و پیشنهاد می کنم روش دوم رو استفاده کنید.

Modifier اونهارو Public کردم مشکل حل شد ولی میشه بپرسم ایراد این کار چیه چرا ازروش دوم که مشکه تره استفاده کنم ؟

titbasoft
دوشنبه 03 مهر 1385, 13:44 عصر
1) مشکل امنیتی داره، با این کار شما دسترسی مستقیم به اجزا دارید میدید
2) Scalability کامپوننت شما رو بالکل از بین می بره. فرض کنید بعد از یک مدت به جای TextBox خواستید از یک چیز دیگه مثلا یک Mask Text box استفاده کنید.

iran_ahvaz_sm
سه شنبه 04 مهر 1385, 07:17 صبح
1) مشکل امنیتی داره، با این کار شما دسترسی مستقیم به اجزا دارید میدید
2) Scalability کامپوننت شما رو بالکل از بین می بره. فرض کنید بعد از یک مدت به جای TextBox خواستید از یک چیز دیگه مثلا یک Mask Text box استفاده کنید.


درسته نوشتن پراپرتی راه خوبییه
ولی میشه با ذکر یه مثال بگین چطور میشه یک پراپراتی را به تعدادی تکس باکس نسبت داد

titbasoft
سه شنبه 04 مهر 1385, 10:05 صبح
درسته نوشتن پراپرتی راه خوبییه
ولی میشه با ذکر یه مثال بگین چطور میشه یک پراپراتی را به تعدادی تکس باکس نسبت داد
غیر ممکن نیست، هدف شما از این کار چیه؟ اگر اون رو بدونم بهتر می تونم راهنمایی کنم.

iran_ahvaz_sm
سه شنبه 04 مهر 1385, 13:15 عصر
Property myText() As String
Get
Return TextBox1.Text
End Get
Set(ByVal Value As String)
TextBox1.Text = Value
End Set
End Property

مثلا همین پرارتی نسبت به چند تکس باکس داده بشه و بشه با یک پارامتر خاصیت تکس
یک از تکس باکسها رو گرفت

titbasoft
سه شنبه 04 مهر 1385, 13:27 عصر
Property myText(ByVal ID As Integer) As String
Get
Select Case ID
Case 1
Return TextBox1.Text
Case 2
Return TextBox2.Text
End Select
End Get
Set(ByVal Value As String)
Select Case ID
Case 1
TextBox1.Text = Value
Case 2
TextBox2.Text = Value
End Select
End Set
End Property

iran_ahvaz_sm
چهارشنبه 05 مهر 1385, 07:57 صبح
Property myText(ByVal ID As Textbox) As String
Get
Return id.Text
End Get
Set(ByVal Value As String)
Id.text = Value
End Set
End Property



البته چون تعداد تکس باکس ها زیاد بود مجبور شدم کد شمارو به این صورت تغییر بدم

titbasoft
چهارشنبه 05 مهر 1385, 10:37 صبح
من اگر بودم باز هم کد رو میفرستادم. فرستادن object باز هم به همون دلیلی که عرض شد باعث کاهش Scalabilty سیستم میشه. شما می تونید یک تابع بنویسید که کنترلتون رو با استفاده از ID پیدا کنه و برگردونه:

findControl("TextBox" & ID).Text=value