PDA

View Full Version : فراخوانی تعدادی عدد در Select Case



پرستو پارسایی
چهارشنبه 13 فروردین 1399, 00:48 صبح
با سلام
من میخواهم تعدادی عدد رو در Select Case فراخوانی کنم ولی راه درستش رو نمیدونم ممنون میشم دوستان در صورت اطلاع راهنمایی کنید. نمونه کد مد نظرم رو هم به این شکله

Dim T10 As String
Select Case T10
Case 10302, 40602, 90902, 161202, 10506, 41006, 91506, 162006, 10712, 41412, 92112, 162812, 10920, 41820, 92720, 163620, 11130, 42230, 93330, 164430, 11342, 42642, 93942, 165242,
11556, 43056, 94556, 166056, 11772, 43472, 95172, 166872, 11990, 43890, 95790, 167690
End Select
این اعداد رو میخوام ییرم تو یه Sub و جاهای مختلف فراخوانی کنم . یا به عبارتی بعد از عبارت Case از sub استفاده کنم.

سپاس

hamidrezax1
پنج شنبه 14 فروردین 1399, 22:25 عصر
سلام دوست عزیز لطف میکنید یکم بیستر توضیح بدید؟

پرستو پارسایی
جمعه 15 فروردین 1399, 01:42 صبح
با سلام من میخوام اعداد فوق رو با همون فرمت در جاهایی که از Select Case استفاده میکنم فراخوانی کنم چون تعداد این اعداد زیاد هست نمیخوام این اعداد رو بازنویسی کنم بعنوان مثال

Dim T10 As String = TextBox1.Text
Select Case T10
Case 11556, 43056, 94556, 166056
'For Example (PictureBox1.image = Nothing )
End Select

سپاس

mmbguide
جمعه 15 فروردین 1399, 21:13 عصر
پیشنهاد میکنم یک پارامتر به کد اضافه کنید که در اون شرایط یک Case اجرا شود که داخل آن case در یک حلقه از مقادیر یک آرایه، حتی ارایه های متغیر استفاده کنید تا نیازی به اصلاح کد درآینده نباشد.

ROSTAM2
دوشنبه 18 فروردین 1399, 09:30 صبح
با سلام من میخوام اعداد فوق رو با همون فرمت در جاهایی که از Select Case استفاده میکنم فراخوانی کنم چون تعداد این اعداد زیاد هست نمیخوام این اعداد رو بازنویسی کنم بعنوان مثال

Dim T10 As String = TextBox1.Text
Select Case T10
Case 11556, 43056, 94556, 166056
'For Example (PictureBox1.image = Nothing )
End Select

سپاس


Dim T10 As Integer = val(TextBox1.Text)
Dim Expr As Image = Nothing
Select Case T10
Case 11556, 43056, 94556, 166056
Expr = My.Resources.Bitmap1

Case #anyNum
Expr = My.Resources.Bitmap2
'...
End Select
PictureBox1.image = Expr

پرستو پارسایی
دوشنبه 18 فروردین 1399, 18:41 عصر
ممنونم ولی مثل اینکه طرح سوال من ناقص بوده من با شرط Case مشکل دارم یعنی اعداد به تعداد زیاد (بیشتر از پستی که ابتدا گذاشتم) برای دستور بعد از case مشکلی ندارم ( لود کردن تصویر رو بعنوان مثال گذاشتم ) جه جوری اون اعداد رو جلوی case ننویسم و بتونم اعداد شرط رو فراخوانی کنم
سپاسگزارم

the king
سه شنبه 19 فروردین 1399, 01:10 صبح
ممنونم ولی مثل اینکه طرح سوال من ناقص بوده من با شرط Case مشکل دارم یعنی اعداد به تعداد زیاد (بیشتر از پستی که ابتدا گذاشتم) برای دستور بعد از case مشکلی ندارم ( لود کردن تصویر رو بعنوان مثال گذاشتم ) جه جوری اون اعداد رو جلوی case ننویسم و بتونم اعداد شرط رو فراخوانی کنم
سپاسگزارم
در منوی Project ویژوال استدیو ...Add New Item رو انتخاب کنید. در لیست انواع Common Items نوع Text File رو انتخاب کنید و نامش رو فرضا TextFile1.txt قرار بدهید.
موقع ویرایش اون TextFile1.txt در پنجره Properties یک مشخصه Build Action هست که باید روی وضعیت Embedded Resource قرار بگیره.
Embedded Resource به این معنا است که این فایل موقع جزئی از فایل اجرایی برنامه میشه و در کد می توانید ازش داده بخوانید.

حالا داخل اون TextFile1.txt هر گروه از مقادیر رو که خواستید بنویسید و برای اسامی گروه نام هایی مثل Red و Green یا هر نام دیگری رو وارد کنید. اسم گروه داخل [ ] مشخص خواهد شد :


[Red]
10302, 40602, 90902
161202, 10506, 41006, 91506
162006, 10712
[Green]
10920, 41820, 92720, 11342, 42642, 93942
[Blue]
164430

و تابعی به نام LoadResource بنویسید که بتونه این گروه ها و مقادیر داخلش رو از فایل بخونه :

Private Function LoadResource(resourceName As String) As Dictionary(Of String, String)
Dim dic As New Dictionary(Of String, String)
Dim assembly = System.Reflection.Assembly.GetExecutingAssembly()
Using stream = assembly.GetManifestResourceStream (String.Format("{0}.{1}", assembly.GetName.Name, resourceName))
Dim reader As New System.IO.StreamReader(stream)
Dim words = reader.ReadToEnd().Split(New String() {" ", ",", vbTab, vbCrLf, vbCr, vbLf}, StringSplitOptions.RemoveEmptyEntries)
Dim group = "None"
For Each word In words
If word.StartsWith("[") Then
group = word.Trim("[", "]")
Else
dic.Add(word, group)
End If
Next
End Using
Return dic
End Function


حالا در ابتدا که فرم فراخوانی میشه این اطلاعات رو داخل یک دیکشنری فرضا به نام dic_ میخونیم :

Public Class Form1

Private _dic = LoadResource("TextFile1.txt")


و بعد در Select Case بررسی می کنیم که آیا مقدار مورد نظر در dic_ هست یا نه، اگر نبود که حالت Else برقرار ئه وگرنه اسم گروه مورد نظر رو از dic_ دریافت می کنیم :

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim T10 As String = TextBox1.Text
If _dic.ContainsKey(T10) Then
Select Case _dic(T10)
Case "Red"
PictureBox1.BackColor = Color.Red
Case "Green"
PictureBox1.BackColor = Color.Green
Case "Blue"
PictureBox1.BackColor = Color.Blue
End Select
Else
PictureBox1.BackColor = Color.White
End If
End Sub



Public Class Form1

Private _dic = LoadResource("TextFile1.txt")

Private Function LoadResource(resourceName As String) As Dictionary(Of String, String)
Dim dic As New Dictionary(Of String, String)
Dim assembly = System.Reflection.Assembly.GetExecutingAssembly()
Using stream = assembly.GetManifestResourceStream (String.Format("{0}.{1}", assembly.GetName.Name, resourceName))
Dim reader As New System.IO.StreamReader(stream)
Dim words = reader.ReadToEnd().Split(New String() {" ", ",", vbTab, vbCrLf, vbCr, vbLf}, StringSplitOptions.RemoveEmptyEntries)
Dim group = "None"
For Each word In words
If word.StartsWith("[") Then
group = word.Trim("[", "]")
Else
dic.Add(word, group)
End If
Next
End Using
Return dic
End Function

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim T10 As String = TextBox1.Text
If _dic.ContainsKey(T10) Then
Select Case _dic(T10)
Case "Red"
PictureBox1.BackColor = Color.Red
Case "Green"
PictureBox1.BackColor = Color.Green
Case "Blue"
PictureBox1.BackColor = Color.Blue
End Select
Else
PictureBox1.BackColor = Color.White
End If
End Sub
End Class

پرستو پارسایی
سه شنبه 19 فروردین 1399, 12:54 عصر
سپاسگزارم تست گردم و کاملا صحیح جواب گرفتم .