PDA

View Full Version : سوال: استفاده از اشیاء درون یک یوزر کنترول



baran_mehr
دوشنبه 21 مرداد 1387, 10:29 صبح
سلام دوستان.:قلب:
چطوری میتونم به اشیا درون یک یوزر کنترول دسترسی داشته باشم؟
مثلا من یه یوزر کنترول می سازم که توش 2 تا textbox هست و به برنامه خودم اضافه میکنم ، میخوام بدونم چه جوری باید به اون TextBox ها مقدار فرستاد و یا مقادیرشون رو خوند یا مخفیشون کرد و از این جور کارها.
ممنون میشم کمک کنید:تشویق:

reza6384
دوشنبه 21 مرداد 1387, 13:30 عصر
مثلا اگر UserCntrol شما Panel باشه



For Each TB As TextBox In Panel1.Controls
If TB.Text = "" Then
TB.Text = "Salam"
End If
Next

baran_mehr
دوشنبه 21 مرداد 1387, 16:02 عصر
سلام reza6384 جان.:قلب:
نمیدونم چرا ForEach کار نمیکنه.:عصبانی++:
من یه یوزر کنترول دارم که فقط توش یه TextBox هست.که براتون اینجا گذاشتم.
فقط میخوام بدونم چی جوری باید به اون Textbox متن بدم و متنشو بخونم و از این جور کارها
ممنون.

mostafaaa
دوشنبه 21 مرداد 1387, 17:42 عصر
سلام دوستان.:قلب:
چطوری میتونم به اشیا درون یک یوزر کنترول دسترسی داشته باشم؟
مثلا من یه یوزر کنترول می سازم که توش 2 تا textbox هست و به برنامه خودم اضافه میکنم ، میخوام بدونم چه جوری باید به اون TextBox ها مقدار فرستاد و یا مقادیرشون رو خوند یا مخفیشون کرد و از این جور کارها.
ممنون میشم کمک کنید:تشویق:
برای دسترسی به اشیای درون یه یوزر کنترل باید اونها رو به صورت Public تعریف کنید.
مثال
21669

Dariuosh
سه شنبه 22 مرداد 1387, 00:00 صبح
هر کنترل برا خودش يه سري خاصيت و رويداد ثابت داره که وقتي شما ازش Inherits ميکني تمام اونا در اختيارت قرار ميگيره
مثلاً


PublicClass MyText
Inherits TextBox
EndClass

در واقع اين الان يه TextBox هست با همه خصوصيات يه TextBox

ولي وقتي شما از يه UserControl ارث بري ميکني يه سري خاصيت واحد که همه Controlها دارن رو در اختيارت قرار ميده (اندازه و سايز يا مکان و...)


PublicClass MyControl
Inherits System.Windows.Forms.UserControl
EndClass

در اصل UserControl يه مجموعه از کنترلهايي هست که شما در کنار هم قرار ميدين تا به منظوره خاصي ازشون استفاده کني
حالا برا دسترسي به کنترلهايي که شما در کنار هم قرار دادين چند راه هست ، يکي اين راهي هست که دوستمون گفت يعني کنترلها رو به صورت Public تعريف کني که زياد کار گشا نيست چون تنها فرقي که ميکنه که Property اون Controlها رو به ليست Propertyهايه Design اضافه ميکنه ولي اينجوري بازم تکليف رويدادها مشخص نيست
شما فرض کن يه UserControl درست کردي که توش يه TextBox داري و يه Button ، که يه خاصيت Text براي استفاده از TextBoxات ميخواي و يه رويداد Click برا Buttonات


Public Class UserControl1
Public Shadows Event Click As EventHandler
Public Shadows Property Text() As String
Get
Return TextBox1.Text
End Get
Set(ByVal value As String)
TextBox1.Text = value
End Set
End Property
Private Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
RaiseEvent Click(sender, e)
End Sub
End Class


به همين منوال ميتوني هرچي خاصتي ايجاد کني

Sub Zero
سه شنبه 22 مرداد 1387, 06:38 صبح
سلام دوستان.:قلب:
چطوری میتونم به اشیا درون یک یوزر کنترول دسترسی داشته باشم؟
مثلا من یه یوزر کنترول می سازم که توش 2 تا textbox هست و به برنامه خودم اضافه میکنم ، میخوام بدونم چه جوری باید به اون TextBox ها مقدار فرستاد و یا مقادیرشون رو خوند یا مخفیشون کرد و از این جور کارها.
ممنون میشم کمک کنید:تشویق:

برای این کار کافیه نام کنترل مورد نظرت رو در فرمت جستجو کنی :

If Me.Controls.ContainsKey("TextBox1") Then _
DirectCast(Me.Controls.Find("TextBox1", True)(0), TextBox).Text = "Your String"
پارامتر دوم متد Find برای مشخص کردن اینه که آیا جستجو در کنترل های فرزند ( ChildControl )
انجام بشه یا نه . و چون خروجی این متد یه آرایه از کنترلهای یافت شدس ایندکس اول رو انتخاب می کنیم.

baran_mehr
چهارشنبه 23 مرداد 1387, 13:14 عصر
mostafaaa جان این مثالی که شما گذاشته بودید رو امتحان کردم .به لیست خصوصیتهام اضافه شده بود اما نمیشد مقدارشون رو بگیرم و یا عوض کنم؟؟:تشویق:
Dariuosh جان من همین کاری که گفتید رو کردم اما هیچ اتفاقی خاصی رخ نمیده من کنترول رو میزارم اگه میشه یه نگاهی کن و بگو چی کار باید کنم.ممنون میشم:تشویق:
Sub Zero جان فکر کنم سوالم رو اشتباه برداشت کردی.به هر حال ممنون:تشویق:

Dariuosh
چهارشنبه 23 مرداد 1387, 13:36 عصر
من همین کاری که گفتید رو کردم اما هیچ اتفاقی خاصی رخ نمیده من کنترول رو میزارم اگه میشه یه نگاهی کن و بگو چی کار باید کنم


اينـــــــــــــــــــــو ببين

baran_mehr
چهارشنبه 23 مرداد 1387, 16:17 عصر
داداشی Dariuosh جان.
خطا میگیره :عصبانی++: خطاش ایمنه:گریه:

Sub Zero
چهارشنبه 23 مرداد 1387, 16:31 عصر
Sub Zero جان فکر کنم سوالم رو اشتباه برداشت کردی.
اشتباه برداشت نکردم دقیقا چیزی که میخواستید رو نوشتم حداقل یک بار امتحانش می کردید .
----------------------------
در ضمن یه چیزی رو مشخص کنید . user Control رو در حالت Design به فرم اضافه میکنید یا به صورت RealTime
اگه در حالت Design این کارو میکنید کافیه نام یوزر کنترل رو بنویسید و با زدن نقطه (.) به اشیا داخلش دسترسی پیدا کنید .
اگه به صورت RealTime و در زمان اجرا اضافه میکنید ، به 2 روش این کار امکان پذیره روش اول همونیه که در پست قبلیم نوشتم . روش دوم هم اینه که یه چیزی مثل کد زیر بنویسی :

Dim fields As New UserControlName
fields.SetBounds(0, 0, 0, 0, BoundsSpecified.Location)
Me.Controls.Add(fields)
fields.TextBox1.Text = "Your String"

baran_mehr
چهارشنبه 23 مرداد 1387, 16:51 عصر
Sub Zero جان من امتحانش کردم اما هیچ تاثیری رو یوزر کنترول و اشیاء درون اون نداشت ، فقط مقدار Textbox داخل فرم خودم رو تغییر میداد. آیا باید کاری دیگه ای هم انجام بدم؟
اما من میخوام مقدار Textbox یوزر کنترول رو عوض کنه...مرسی عزیزم

baran_mehr
چهارشنبه 23 مرداد 1387, 17:19 عصر
سلام Sub Zero جان.:قلب:

در ضمن یه چیزی رو مشخص کنید . user Control رو در حالت Design به فرم اضافه میکنید یا به صورت RealTime

فکر کنم مشخص هست.
اگه در حالت Design این کارو میکنید کافیه نام یوزر کنترل رو بنویسید و با زدن نقطه (.) به اشیا داخلش دسترسی پیدا کنید .

UserControl11.TextBox1.Text = "rrr"
من این کار رو کردم اما خطا گرفت ، عکس خطا رو گذاشتم.

Dariuosh
چهارشنبه 23 مرداد 1387, 18:08 عصر
راستش نميدونم که اون Error برا چيه
در هر صورت DLLاشو گذاشتم

mostafaaa
چهارشنبه 23 مرداد 1387, 18:14 عصر
من با نظر دوستمون داریوش موافقم در مورد

حالا برا دسترسي به کنترلهايي که شما در کنار هم قرار دادين چند راه هست ، يکي اين راهي هست که دوستمون گفت يعني کنترلها رو به صورت Public تعريف کني که زياد کار گشا نيست چون تنها فرقي که ميکنه که Property اون Controlها رو به ليست Propertyهايه Design اضافه ميکنه
و اینکه کدهاشون هم اشکالی نداره .ببین از اینا میتونی استفاده کنی

Public Class UserControl1
Public Shadows Property Text1() As String
Get
Return Me.TextBox1.Text
End Get
Set(ByVal value As String)
TextBox1.Text = value
End Set
End Property
Public Shadows Property Text1Bcolor() As Color
Get
Return Me.TextBox1.BackColor
End Get
Set(ByVal value As Color)
Me.TextBox1.BackColor = value
End Set
End Property
Public Shadows Property Text1FontColor() As Color
Get
Return Me.TextBox1.ForeColor
End Get
Set(ByVal value As Color)
Me.TextBox1.ForeColor = value
End Set
End Property

End Class
اینم dll مربوطه
21770

baran_mehr
چهارشنبه 23 مرداد 1387, 20:53 عصر
دست دوستان گلم درد نکنه، بلاخره جواب داد و کار کرد .دیگه داشت مخم میترکید
ممنون از اقاmostafaaa و اقا Dariuosh گل.امیدوارم روزگار به کامتون باشه