 |
|
การคืนค่าพร้อมกัน 2 ค่าจาก Function ไปยัง Form ทำยังไง |
|
 |
|
|
 |
 |
|
1.การคืนค่าพร้อมกัน 2 ค่าจาก Function ไปยัง Form ทำยังไงครับ
2.หากคืนค่า 2 ค่าได้ แล้วตอนรับค่ามาแสดงผลทำยังไง แบบไหนได้บ้างครับ
ไม่ทราบว่าทำได้ไหม แนะนำทีครับ
อีกอย่าง ถ้าใครเห็นว่าโค้ดผมมันวุ่นวายสุนัขไม่รับประทาน ก็แนะนำวิธีเขียนโค้ดง่ายๆได้นะครับ 
ส่วนของฟอร์ม
Code (VB.NET)
Public Class Form_homeloop
Private Sub Form3_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Me.CenterToScreen()
TextBox1.MaxLength = 5
TextBox2.MaxLength = 5
ComboBox1.Items.Add(" ")
ComboBox1.Items.Add("บวก")
ComboBox1.Items.Add("ลบ")
ComboBox1.Items.Add("คูณ")
ComboBox1.Items.Add("หาร")
ComboBox1.DropDownStyle = ComboBoxStyle.DropDownList
ComboBox2.Items.Add(" มากกว่า ")
ComboBox2.Items.Add(" น้อยกว่า ")
ComboBox2.DropDownStyle = ComboBoxStyle.DropDownList
TextBox1.Text = ""
TextBox2.Text = ""
TextBox3.Text = ""
TextBox4.Text = ""
ComboBox1.Enabled = False
TextBox2.Enabled = False
Label3.Enabled = False
TextBox3.Enabled = False
Button1.Enabled = False
Button2.Enabled = False
TextBox1.Focus()
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim r, n, m As Integer
If TextBox1.Text = "" Then
MsgBox("กรุณาป้อนค่าที่หนึ่ง")
TextBox1.Focus()
Exit Sub
ElseIf TextBox2.Text = "" Then
MsgBox("กรุณาป้อนค่าที่สอง")
TextBox2.Focus()
Exit Sub
ElseIf TextBox3.Text = "" Then
MsgBox("กรุณาป้อนค่าที่สาม")
TextBox2.Focus()
Exit Sub
End If
If ComboBox1.SelectedIndex = 0 Then
MsgBox("กรุณาเลือกประเภทการคำนวณ")
Else
Dim num3 As Integer = CInt(TextBox3.Text)
Dim lo As Integer = 1
Dim ol As Integer = 0
n = CInt(TextBox1.Text)
m = CInt(TextBox2.Text)
Dim o As Integer = CInt(ComboBox1.SelectedIndex)
Dim p As Integer = CInt(ComboBox2.SelectedIndex)
'homeloop(TextBox1.Text, TextBox2.Text, TextBox3.Text, o, p)
Try
If lo = 1 Then
TextBox4.Text = "กำหนด " & TextBox1.Text & " " & ComboBox1.Text & " " & TextBox2.Text & vbCrLf &
"โดยให้" & ComboBox1.Text & " " & TextBox2.Text & " เรื่อยๆ" & vbCrLf &
"จนผลลัพธ์" & ComboBox2.Text & " " & num3 & vbCrLf &
"โดยทำการวนทั้งหมด " & homeloop(TextBox1.Text, TextBox2.Text, TextBox3.Text, o, p) & " รอบ" & vbCrLf &
"และค่าสุดท้ายคือ " & r
Else
TextBox4.Text = "กำหนด " & TextBox1.Text & " " & ComboBox1.Text & " " & TextBox2.Text & vbCrLf &
"โดยให้" & ComboBox1.Text & " " & TextBox2.Text & " เรื่อยๆ" & vbCrLf &
"จนผลลัพธ์" & ComboBox2.Text & " " & num3 & vbCrLf &
"โดยทำการวนทั้งหมด " & homeloop(TextBox1.Text, TextBox2.Text, TextBox3.Text, o, p) & " รอบ" & vbCrLf &
"และค่าสุดท้ายคือ " & r
End If
Catch
MsgBox("ผิดพลาด ลองใหม่")
End Try
End If
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
TextBox1.Text = ""
TextBox2.Text = ""
TextBox3.Text = ""
TextBox4.Text = ""
ComboBox1.Enabled = False
TextBox2.Enabled = False
Label3.Enabled = False
TextBox3.Enabled = False
Button1.Enabled = False
TextBox1.Focus()
End Sub
Private Sub ComboBox1_SelectedIndexChanged(sender As System.Object, e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged
TextBox2.Enabled = True
Label3.Enabled = True
'------------------------------
If ComboBox1.SelectedIndex = 0 Then
Label3.Text = " "
TextBox2.Enabled = False
Label3.Enabled = False
ElseIf ComboBox1.SelectedIndex = 1 Then
Label3.Text = "มากกว่า"
ComboBox2.SelectedIndex = 0
ElseIf ComboBox1.SelectedIndex = 2 Then
Label3.Text = "น้อยกว่า"
ComboBox2.SelectedIndex = 1
ElseIf ComboBox1.SelectedIndex = 3 Then
Label3.Text = "มากกว่า"
ComboBox2.SelectedIndex = 0
ElseIf ComboBox1.SelectedIndex = 4 Then
Label3.Text = "น้อยกว่า"
ComboBox2.SelectedIndex = 1
End If
'------------------------------
End Sub
Private Sub TextBox1_KeyPress(sender As System.Object, e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox1.KeyPress
ComboBox1.Enabled = True
ComboBox1.SelectedIndex = 0
Button2.Enabled = True
End Sub
Private Sub TextBox2_KeyPress(sender As System.Object, e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox2.KeyPress
TextBox3.Enabled = True
End Sub
Private Sub TextBox3_KeyPress(sender As System.Object, e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox3.KeyPress
Button1.Enabled = True
End Sub
End Class
ส่วนของฟังก์ชั่นในโมดูล
Code (VB.NET)
Module Module1
Public Function homeloop(ByVal num1 As String, num2 As String, nam3 As String, q As String, w As String) As Long
Dim num3 As Integer = CInt(nam3)
Dim m As Integer = CInt(num2)
Dim n As Integer = CInt(num1)
Dim a As Integer = q
Dim s As Integer = w
Dim r As Integer
Dim lo As Integer = 1
Dim ol As Integer = 0
If s = 0 Then 'มากกว่า
If a = 1 Then
r = n + m
If r < num3 + 1 Then
While r < num3 + 1
r = m + r
lo = lo + 1
End While
End If
ElseIf a = 2 Then
r = n - m
If r < num3 + 1 Then
While r < num3 + 1
r = r - m
lo = lo + 1
End While
End If
ElseIf a = 3 Then
r = n * m
If r < num3 + 1 Then
While r < num3 + 1
r = m * r
lo = lo + 1
End While
End If
ElseIf a = 4 Then
r = n / m
If r < num3 + 1 Then
While r < num3 + 1
r = r / m
lo = lo + 1
End While
End If
End If
ElseIf s = 1 Then
If a = 1 Then
r = n + m
If r > num3 + 1 Then
While r > num3 + 1
r = m + r
lo = lo + 1
End While
End If
ElseIf a = 2 Then
r = n - m
If r > num3 + 1 Then
While r > num3 + 1
r = r - m
lo = lo + 1
End While
End If
ElseIf a = 3 Then
r = n * m
If r > num3 + 1 Then
While r > num3 + 1
r = m * r
lo = lo + 1
End While
End If
ElseIf a = 4 Then
r = n / m
If r > num3 + 1 Then
While r > num3 + 1
r = r / m
lo = lo + 1
End While
End If
End If
End If
If lo = 1 Then
lo = 0
Return r & lo 'ส่งค่าทั้ง 2 ตัวนี้ครับ
Else
Return r & lo 'ส่งค่าทั้ง 2 ตัวนี้ครับ
End If
End Function
End Module
ขอบคุณมากครับ
ปล.เป็น VB2010 นะครับ ไม่รู้ผิดหมวดป่าว
Tag : .NET, VBScript, VB.NET, Windows
|
ประวัติการแก้ไข 2014-11-05 02:30:53 2014-11-05 02:31:55
|
 |
 |
 |
 |
Date :
2014-11-05 02:27:28 |
By :
พีรพล |
View :
1103 |
Reply :
13 |
|
 |
 |
 |
 |
|
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
เคยทำแต่ที่เป็นแบบ byref หรือไม่ก็ array ครับ รอท่านอื่นมาตอบ
|
 |
 |
 |
 |
Date :
2014-11-05 07:33:31 |
By :
lamaka.tor |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
2 ตัวเลือกง่ายที่สุด
1 ref parameter
2 return object ไรก็ได้ที่มี field อยู่ข้างใน 2 ตัว
|
 |
 |
 |
 |
Date :
2014-11-05 10:55:16 |
By :
nooknoname |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
dictionary
|
 |
 |
 |
 |
Date :
2014-11-05 11:06:49 |
By :
ห้ามตอบเกินวันละ 2 กระทู้ |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ตอบความคิดเห็นที่ : 3 เขียนโดย : ห้ามตอบเกินวันละ 2 กระทู้ เมื่อวันที่ 2014-11-05 11:06:49
รายละเอียดของการตอบ ::
dictionary
<div style="font-family: Consolas; font-size: 10pt; color: black; background: white;">
<p style="margin: 0px;"> <span style="color: blue;">Private</span> Formula <span style="color: blue;">As</span> <span style="color: blue;">New</span> <span style="color: #2b91af;">Dictionary</span>(<span style="color: blue;">Of</span> <span style="color: blue;">String</span>, <span style="color: #2b91af;">DelegateFormula</span>)() <span style="color: blue;">From</span> {{<span style="color: #a31515;">"+"</span>, <span style="color: blue;">Function</span>(m, n) m + n},</p>
<p style="margin: 0px;"> {<span style="color: #a31515;">"-"</span>, <span style="color: blue;">Function</span>(m, n) m - n},</p>
<p style="margin: 0px;"> {<span style="color: #a31515;">"*"</span>, <span style="color: blue;">Function</span>(m, n) m * n},</p>
<p style="margin: 0px;"> {<span style="color: #a31515;">"/"</span>, <span style="color: blue;">Function</span>(m, n) m / n}</p>
<p style="margin: 0px;"> }</p>
</div>
|
 |
 |
 |
 |
Date :
2014-11-05 14:05:08 |
By :
หน้าฮี |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ใครที่ทำตัวเกรียน รู้ตัวเองนะครับ
ผมคืนค่าได้แล้วครับ เรียกใช้ก็ได้เรียบร้อยครับ
แทนบรรทัดที่ 84 กับ 86 หน้า โมดูล
Code (VB.NET)
Dim ff() As Integer = {r, lo}
Return ff
ส่วนนี่ การเรียกใช้ครับ
zz = homeloop(TextBox1.Text, TextBox2.Text, TextBox3.Text, o, p)(0)
xx = homeloop(TextBox1.Text, TextBox2.Text, TextBox3.Text, o, p)(1)
ปล.เผื่อมีประโยชน์กับคนอื่นที่ไม่ได้เรื่องนี้เหมือนกันบ้าง
เพราะหาไม่เจอเลย โดยเฉพาะการเรียกใช้ ฟังก์ชั่นที่ส่งค่า+คืนค่าแบบ array ไม่มีเลย
|
 |
 |
 |
 |
Date :
2014-11-07 00:51:11 |
By :
พีรพล |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ส่วนใหญ่ใช้ sub (byref ....) ครับ
Code (VB.NET)
Private Sub getResult(ByVal val1 As Integer, ByVal val2 As Integer, ByRef result1 As Integer, ByRef result2 As Integer)
result1 = val1 - val2
result2 = val1 + val2
End Sub
|
 |
 |
 |
 |
Date :
2014-11-07 10:33:35 |
By :
deksoke |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
อันนี้เปรียบเทียบเพื่อให้เห็นภาพได้ชัดเจนยิ่งขึ้น
"บางอย่างดูเหมือนมีค่าสำหรับใครบางคน แต่ผมก็โยนทิ้งถังขยะหมดเลยครับ"
Code (VB.NET)
Private Delegate Function DelegateFormula(ByVal m As Double, ByVal n As Double) As Double
Private Formula As New Dictionary(Of String, DelegateFormula)() From {{"+", Function(m, n) m + n},
{"-", Function(m, n) m - n},
{"*", Function(m, n) m * n},
{"/", Function(m, n) m / n}
}
|
 |
 |
 |
 |
Date :
2014-11-07 11:05:06 |
By :
หน้าฮี |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
จาก #NO9 ผมลืมบอกอะไรไปนิดหนึ่งครับ วิธีใช้ (วิธีคิด ไปได้ก็ต้องกลับได้)
Code (VB.NET)
Dim result = Formula("+").Invoke("15", "5")
'หรือ
Dim result = Formula("+").Invoke(15, 5)
'result = 20
ปล. ผมไม่รู้จักคำว่า "เกรียน" แต่ผมเข้าใจคำว่า "Dictionary And Delegate"
และผมเข้าใจอย่างลึกซึ้ง รู้ที่มาและรู้ที่ไป เสมอ (ทันกาลเวลา)
|
ประวัติการแก้ไข 2014-11-07 11:29:47 2014-11-07 11:32:49
 |
 |
 |
 |
Date :
2014-11-07 11:28:36 |
By :
หน้าฮี |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
|
|