PDA

View Full Version : سوال: مقایسه نام دو متغیر



aliebrahimi1900
دوشنبه 15 تیر 1394, 19:08 عصر
سلام خدمت اساتید محترم
هیچکس تا حالا به این برخورده که باید اسم چند متغیرو مقایسه کنه
یه چند جایی این مشکل برام پیش اومده هر دفه با یه بامبول ردش کردم
مثلا با آرایه چند بعدی کارم حل میشه ولی مثلا توی پارامترهای یه تابع نمیشه از آرایه استفاده کرد یا جایی که بخوای دو متغیر از دو نوع رو متناظر کنی

Dim a1 As String
Dim a2 As String
Dim a3 As String
Dim a4 As String
Dim b1 As Integer
Dim b2 As Integer
Dim b3 As Integer
Dim b4 As Integer
For Each t In {a1, a2, a3, a4}
For Each l In {b1, b2, b3, b4}
'''''''to message box zir har dafe a ba motanazeresh to b biad masalan a1 + b1 or a2 + b2
MessageBox.Show(t + l.ToString)
Next
Next


اینجا اگه یک نوع متغیر داشتم از آرایه دو بعدی استفاده میکردم
مثل این


Dim a(1, 3) As String
For i = 0 To 3
MessageBox.Show(a(0, i) + a(1, i))
Next


حالا من میخوام مثلا بتونم با نام متغیر عین ولیو متغیر رفتار کنم مثلا با تابع Right بتونم عدد کنارشونو بخونم و مقایسه کنم

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

Dim a1 As String = "a1"
Dim a2 As String = "a2"
Dim a3 As String = "a3"
Dim a4 As String = "a4"
Dim b1 As Integer = 1
Dim b2 As Integer = 2
Dim b3 As Integer = 3
Dim b4 As Integer = 4
For Each t In {a1, a2, a3, a4}
For Each l In {b1, b2, b3, b4}
If Int(Microsoft.VisualBasic.Right(t, 1)) = l Then
MessageBox.Show(t + l)
End If
Next
Next



ببخشید اگه سوالمو نتونستم واضح تر بگم
با تشکر

_4rm4n_
دوشنبه 15 تیر 1394, 20:12 عصر
سلام

راستش من متوحه نشدم چرا از آرایه ها استفاده نکردید ؟! اینکارتون خیلی غیر استاندارده که 12 تا متغیر از یک جنس تعریف کردید !!

pbm_soy
دوشنبه 15 تیر 1394, 22:04 عصر
منم سوال را دقیقا نفهمیدم!
ولی موارد زیر را نوشته بودید:
* نمیتوان آرایه را به عنوان پارامترهای یک تابع استفاده کرد. این مورد اشتباه است! و بصورت زیر میتوانید اینکار را انجام دهید

public function myFunction(ByRef myArr() as integer)
یا
public function myFunction(ByRef myArr(,) ) as integer


* اگر مشکلت تعریف آرایه با نوعهای مختلف باشد ساده ترین کار در VB استفاده از نوع variant است یعنی آرایه را از نوع Variant یا Object تعریف کنید و به خانه هاش هرنوع داده ای که دوست داشتید بدید! یا اینکه میتوانید یک type تعریف کنید که دارای چند فیلد از نوعهای دلخواهت باشد و آرایه را از نوع آن type تعریف کنید

امیدوارم کمکی کرده باشم چون سوال شما را دقیق نفهمیدم

pbm_soy
دوشنبه 15 تیر 1394, 22:27 عصر
منم سوال را دقیقا نفهمیدم!
ولی موارد زیر را نوشته بودید:
* نمیتوان آرایه را به عنوان پارامترهای یک تابع استفاده کرد. این مورد اشتباه است! و بصورت زیر میتوانید اینکار را انجام دهید

public function myFunction(ByRef myArr() as integer)
یا
public function myFunction(ByRef myArr(,) ) as integer


* اگر مشکلت تعریف آرایه با نوعهای مختلف باشد ساده ترین کار در VB استفاده از نوع variant است یعنی آرایه را از نوع Variant یا Object تعریف کنید و به خانه هاش هرنوع داده ای که دوست داشتید بدید! یا اینکه میتوانید یک type تعریف کنید که دارای چند فیلد از نوعهای دلخواهت باشد و آرایه را از نوع آن type تعریف کنید

امیدوارم کمکی کرده باشم چون سوال شما را دقیق نفهمیدم

aliebrahimi1900
سه شنبه 16 تیر 1394, 19:24 عصر
سلام دوستان ممنون از محبتتون برای جوابا
حرف هر دو تاتون صحیحه ولی من منظورم در این کد نیست
منظور اصلیم اینه که تابعی چیزی وجود داره که با نام متغیرها حالا چه اینجا که چندتا تعریف کردیم یا جای دیگه عین یه رشته رفتار کرد
مثلا اینجا تو این حلقه اسم Button1 الی Button3 نشون داده میشه حالا موردی هست که با اسم متغیر این رفتارو کرد



For Each a As Button In {Button1, Button2, Button3}
MessageBox.Show(a.Name)
Next


شاید به نظرتون کلش اشکال داشته باشه ولی یه جایی هایی به درد میخوره برای کم کد زدن مثلا یه تعداد زیادی چک باکس داشته باشیم و تکست باکس نظیر داشته باشن میشه با دو تا for و Right کلی کد زدنو کم کرد عین این

For Each ch As CheckBox In {CheckBox1, CheckBox2, CheckBox3,..., CheckBoxN}
If ch.Checked = True Then
Dim i As Integer = Microsoft.VisualBasic.Right(ch.Name, Microsoft.VisualBasic.Len(ch.Name) - 8)
For Each tx As TextBox In {TextBox1, TextBox2, TextBox3,..., TextBoxN}
If Int(Microsoft.VisualBasic.Right(tx.Name, Microsoft.VisualBasic.Len(tx.Name) - 7)) = i Then
MessageBox.Show(tx.Text)
End If
Next
End If
Next


باز میگم شاید مشکل داشته باشه ولی به درد میخوره


حالا من منظورم اینه مثلا تو همین for میشه اسم متغیرو در آورد؟

Saman_12
سه شنبه 16 تیر 1394, 21:23 عصر
شاید با System.Reflection بشه : این لینک رو نگاه کنید (http://barnamenevis.org/showthread.php?483754-مقداردهی-کل-فیلدهای-یک-کلاس-توسط-کلاس-دیگر&p=2165376#post2165376)
این جور مسائل زیاد علاقه مند نداره خودتون باید برید دنبالش