PDA

View Full Version : سوال: برگرداندن یک آبجکت از یک string



pooya1072
دوشنبه 01 اسفند 1390, 16:47 عصر
سلام
آیا تابعی وجود داره که یک رشته (string ) رو بگیره و از اون یک object برگردونه ؟

مثلاً رشته "Button1" به عنوان ورودی این تابع و خروجی این تابع رو بشه به عنوان شی Button1 مورد استفاده قرار بگیره.


"ThisFunction("Button1").text="cancel

gilsoft
دوشنبه 01 اسفند 1390, 16:55 عصر
آیا تابعی وجود داره که یک رشته (string ) رو بگیره و از اون یک object برگردونه ؟
سلام دوست عزیز
تا جایی که من میدونم همچین چیزی امکان نداره !
یه سر به لینک زیر بزن

http://barnamenevis.org/showthread.php?323773-%D9%85%D8%B4%DA%A9%D9%84-%D8%AF%D8%B1-%D8%AA%D8%A8%D8%AF%DB%8C%D9%84-String-%D8%A8%D9%87-Object

pooya1072
دوشنبه 01 اسفند 1390, 17:03 عصر
سلام دوست عزیز
چرا..امکان پذیره...همین الان توی گوگل سرچ کردم و جواب رو گرفتم.می ذارم تا دوستان هم استفاده کنند.


Dim objForm As Form
Dim sValue As String
Dim FullTypeName As String
Dim FormInstanceType As Type
' Form class name
sValue = "Form2"
' Assume that form classes' namespace is the same as ProductName
FullTypeName = Application.ProductName & "." & sValue
' Now, get the actual type
FormInstanceType = Type.GetType(FullTypeName, True, True)
' Create an instance of this form type
objForm = CType(Activator.CreateInstance(FormInstanceType), Form)
' Show the form instance
objForm.Show()

فرید نجفلو
دوشنبه 01 اسفند 1390, 17:08 عصر
ببینید دوست من این کاری که شما می خواهید دور از منطقه!!!
فرض کنید شما به جای اون تابع تصمیم میگیرید حالا این متن من رو تبدیل کنید
btnLableText
شما چه آبجکتی بر می گردونید
شما باید یک شئ رو ایجاد ، خصوصیاتش رو تنظیم و مورد استفاده قرار بدید
یا اینکه خودتون یک تابع بسازید که حساس به کلمات خاص باشه.مثل کد زیر:

If InStr(objName, "TextBox") Then
Return New TextBox With {.Name = objName}
ElseIf InStr(objName, "Button") Then
Return New Button With {.Name = objName}
Else
Return Nothing
End If


البته اگه شما می گفتین مشکل اصلی چیه شاید راه حل های بهتری باشه!

فرید نجفلو
دوشنبه 01 اسفند 1390, 17:16 عصر
بله این کد درسته ولی توجه کنید شما به تابع چی می دین و چی می گیرین و اینکه شما در سوالتون چی فرمودین!!
شما به این تابع نام یک آبجکت رو می دی که از قبل تو برنامه شما وجود داره و اون یک نمون از کپی اون دریافت می کنید!
در حالت کلی یه روش دیگه هم وجود داره که شما نام کامل Type رو می دید مثلا (System.Windows.Forms.ButtonBase.Button) و نمونه ای از اوون می گیرید

pooya1072
دوشنبه 01 اسفند 1390, 17:18 عصر
نه دوست عزیز...دور از منطق چرا ؟

فرض کنید توی یک فرم 100 تا textbox داریم و می خوایم به همه اونا مقدار دهی کنیم.

for i=1 to 100
ThisFunction("TextBox" & i).text=i
next i

ببینید چه راحت می شه

pooya1072
دوشنبه 01 اسفند 1390, 17:21 عصر
شما به این تابع نام یک آبجکت رو می دی که از قبل تو برنامه شما وجود داره و اون یک نمون از کپی اون دریافت می کنید!


توی این برنامه قسمت مهم خط " sValue=" Form1 است که خیلی کار راه اندازه

فرید نجفلو
دوشنبه 01 اسفند 1390, 17:42 عصر
نه دوست عزیز...دور از منطق چرا ؟

فرض کنید توی یک فرم 100 تا textbox داریم و می خوایم به همه اونا مقدار دهی کنیم.

for i=1 to 100
ThisFunction("TextBox" & i).text=i
next i

ببینید چه راحت می شه


من یه ره راحتر دارم واست:


For Each txtbox In Me.Controls
If TypeOf txtbox Is TextBox Then
CType(txtbox, TextBox).Text = "Text"
End If
Next
'
'or this one
'
For i = 0 To 100
Try
CType(Me.Controls("TextBox" & i), TextBox).Text = "Text"
Catch
End Try
Next

سخترین راه همیشه بهترین راه نیست

فرید نجفلو
دوشنبه 01 اسفند 1390, 17:49 عصر
توی این برنامه قسمت مهم خط " sValue=" Form1 است که خیلی کار راه اندازه

تو این کدی هم که شما دادین اون طور که به نظر می رسه خود شئ برگردونده نمی شه و فقط یک نمونه مجزا برگشت می شه
اما اگه شما می خواهید از فرم خودتون یه نمونه داشته باشید بهتر نیست از new و = استفاده کنید
یک نمونه مجزا از فرم:

Dim Newfrm = new Form1

اشاره گر (refrence) به Form1

Dim Newfrm = Form1

pooya1072
دوشنبه 01 اسفند 1390, 19:41 عصر
با تشکر
راه های رسیدن به خدا به تعداد آدمهایه که می خوان به خدا برسن....:چشمک:

و البته خیلی بیشتر

فرید نجفلو
دوشنبه 01 اسفند 1390, 20:11 عصر
با تشکر
راه های رسیدن به خدا به تعداد آدمهایه که می خوان به خدا برسن....:چشمک:

و البته خیلی بیشتر

بعضی راه ها آدم را از اتوبان می برند بعضی از جاده خاکی:قهقهه:

pooya1072
سه شنبه 02 اسفند 1390, 14:49 عصر
باز هم سلام

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



For i = 0 To 100
Try
CType(Me.Controls("TextBox" & i), TextBox).Text = "Text"
Catch
End Try
Next
به یه مشکل برخوردم.توی فرم یک TabControl قرار دادم و textbox رو داخل اون قرار دادم.اگر تکست باکس توی فرم باشه دستور (Me.Controls("TextBox" & "1"),TextBox کنترل تکست باکس رو بطور صحیح بر می گردونه , ولی اگر تکست باکس رو داخل TabControl بذاریم (Me.Controls("TextBox" & "1"),TextBox مقدار Nothing رو بر می گردونه .

Hybrid
سه شنبه 02 اسفند 1390, 15:32 عصر
سلام ، یه کم تغییرش بدین درست میشه :


For i = 0 To 100
Try
CType(TabControl1.TabPages("tabpage1").Controls("TextBox" & i), TextBox).Text = "Text"
Catch
End Try
Next

(این کد واسه وقتیه که 101 تا تکست باکس (کمتر هم باشه اشکالی نداره) درون یکی از Tabpage هاتون (در اینجا TabePage1 ) دارین و میخواین خصیصه Text اوا رو به Text تغییر بدین.)

( وقتی که هم تکست باکسهاتون بر روی فرم قرار داره میتونین از کدی که خودتون گذاشتین استفاده کنین)

موفق باشید./

فرید نجفلو
سه شنبه 02 اسفند 1390, 15:48 عصر
اگه قصدت فقط تغییر متن کلیه تکست باکسها ست این روش جواب می ده
Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
ChangeText("Farid.N", Me, True)
End Sub
Private Sub ChangeText(theText As String, Optional SearchIn As Object = Nothing, Optional FindInChilds As Boolean = True)
If SearchIn Is Nothing Then SearchIn = Me
For Each Cntrl In SearchIn.Controls
If TypeOf Cntrl Is TextBox Then
Cntrl.Text = theText
ElseIf Cntrl.HasChildren Then
ChangeText(theText, Cntrl, True)
End If
Next
End Sub


اگه می خوای دقیقا با اسمشون (Textbox1) بگو یه فکر دیگه بکنیم