نوشته شده توسط
پرستو پارسایی
ممنونم ولی مثل اینکه طرح سوال من ناقص بوده من با شرط 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