Przykład 5 Kąt, długości i współczynniki kierunkowe.
Projekt:
Obiekty mają zmienione następujące wartości cech:
Położenie i wielkość obiektów (w przybliżeniu) zgodnie z wyglądem w oknie programu
Cecha NAME:
Dodane przyciski mają nazwy odpowiednio - DŁUGOŚĆ_PRZ i WSPÓŁCZYNNIKI_PRZ
Dodane przyciski (i KĄT_PRZ) maja cechę ENABLED wyłaczona (=FALSE)
Etykiety mają nazwy odpowiednio -KĄTF_ETY, DŁUGOŚĆL_ETY, DŁUGOŚĆP_ETY, AL._ETY, AP_ETY, BL_ETY I BP_ETY, a pozostałe LABEL ( bez zmiany nazwy)
Przyciski opcji (RADIOBUTTON) mają nazwy METR_OPC,CENTYMETR_OPC i MILIMETR_OPC i są umieszczone na obiekcie GRUPA_OPCJI (kontrolka GroupBox z kontenera CONTAINERS)
Dodatkowo:
Zmiany koloru tła i koloru napisu, oraz zmiany czcionki według własnego uznania.
Pozostałe cechy obiektów zachowują wartości początkowe.
Kod programu:
Wpisujemy kod oznaczony kolorem czarnym, pozostała część jest tworzona automatycznie przez VB.
„ Kolor zielony (poprzedzony Apostrofem) oznacza tekst komentarza.
Zamieszczono nowe i zmienione procedury
Public Class p5
Dim xl, xc, xp, yl, yc, yp As Single
Dim azymut_l, azymut_p As Double
Dim dxl, dyl, dxp, dyp As Single
Dim długość_l, długość_p As Double
Dim mnożnik As Integer
Dim t As String
Private Sub wyczyść_prz_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles wyczyść_prz.Click
. . . . . . .
kąt_ety.Text = "" : kątF_ety.Text = ""
długośćL_ety.Text = "" : długośćP_ety.Text = ""
AL_ety.Text = "" : BL_ety.Text = ""
AP_ety.Text = "" : BP_ety.Text = ""
kąt_prz.Enabled = False
długość_prz.Enabled = False
współczynniki_prz.Enabled = False
End Sub
Private Sub azymut_prz_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles azymut_prz.Click
„ usuwamy deklarację przyrostów DIM dxl,……
If kontrola_danych() Then Exit Sub
xl = Val(xl_txt.Text)
. . . . . .
kąt_ety.Text = "" : kątF_ety.Text = ""
kąt_prz.Enabled = True : długość_prz.Enabled = True
End Sub
Private Sub kąt_prz_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles kąt_prz.Click
Dim kąt, kątF, f1, f2 As Double
kąt = azymut_p - azymut_l
If kąt < 0 Then kąt = kąt + 400
kąt_ety.Text = Format(kąt, " 0.0000 gradów ")
f1 = dxl * dyp - dyl * dxp
f2 = dxl * dxp + dyl * dyp
kątF = Math.Atan(f1 / f2)
kątF = kątF * 200 / Math.PI
If f2 < 0 Then
kątF = 200 + kątF
ElseIf f1 < 0 Then
kątF = kątF + 400
End If
kątF_ety.Text = Format(kątF, " 0.0000 gradów ")
End Sub
Function kontrola_danych() As Boolean
„ funkcja użytkownika (niezwiązana z żadnym obiektem), w całości wpisywana w oknie kodu
Dim okey As Boolean
okey = True
If xl_txt.Text = "" Then okey = False
If xp_txt.Text = "" Then okey = False
If xc_txt.Text = "" Then okey = False
If yl_txt.Text = "" Then okey = False
If yp_txt.Text = "" Then okey = False
If yc_txt.Text = "" Then okey = False
If xl_txt.Text = xc_txt.Text And yl_txt.Text = yc_txt.Text Then okey = False
If xp_txt.Text = xc_txt.Text And yp_txt.Text = yc_txt.Text Then okey = False
If Not okey Then MsgBox("Brak conajmniej jednej współrzędnej, lub punkty sie pokrywają !!", 16, " Błąd danych ")
kontrola_danych = Not okey
End Function
„ Obsługa klawisza ENTER do “przechodzenia” do nastepnego pola tekstowego przy wprowadzaniu danych (kod #13)
Private Sub xl_txt_KeyUp(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles xl_txt.KeyUp
If e.KeyCode = 13 Then yl_txt.Focus() „ SUB generowane w oknie kodu,odpowiednieo z listy lewej obiekt a z listy prawej zdarzenie
End Sub
Private Sub xp_txt_KeyUp(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles xp_txt.KeyUp
If e.KeyCode = 13 Then yp_txt.Focus() „ SUB generowane w oknie kodu,odpowiednieo z listy lewej obiekt a z listy prawej zdarzenie
End Sub
Private Sub xc_txt_KeyUp(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles xc_txt.KeyUp
If e.KeyCode = 13 Then yc_txt.Focus() „ SUB generowane w oknie kodu,odpowiednieo z listy lewej obiekt a z listy prawej zdarzenie
End Sub
Private Sub yc_txt_KeyUp(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles yc_txt.KeyUp
If e.KeyCode = 13 Then xp_txt.Focus() „ SUB generowane w oknie kodu,odpowiednieo z listy lewej obiekt a z listy prawej zdarzenie
End Sub
Private Sub yp_txt_KeyUp(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles yp_txt.KeyUp
If e.KeyCode = 13 Then azymut_prz.Focus() „ SUB generowane w oknie kodu, z listy lewej obiekt a z listy prawej zdarzenie
Private Sub yl_txt_KeyUp(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles yl_txt.KeyUp
If e.KeyCode = 13 Then xc_txt.Focus() „ SUB generowane w oknie kodu,odpowiednieo z listy lewej obiekt a z listy prawej zdarzenie
End Sub
Private Sub długość_prz_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles długość_prz.Click
długość_l = (dxl ^ 2 + dyl ^ 2) ^ 0.5
długość_p = (dxp ^ 2 + dyp ^ 2) ^ 0.5
długośćL_ety.Text = Format(długość_l, " 0.000 metrów ")
długośćP_ety.Text = Format(długość_p, " 0.000 metrów ")
współczynniki_prz.Enabled = True
End Sub
Private Sub współczynniki_prz_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles współczynniki_prz.Click
Dim al, ap, bl, bp As Single
Dim ro As Single = 200 / Math.PI
al = dxl / długość_l ^ 2 * ro * mnożnik
AL_ety.Text = Format(al, " 0.00000 ") + t
ap = dxp / długość_p ^ 2 * ro * mnożnik
AP_ety.Text = Format(ap, " 0.00000 ") + t
bl = dyl / długość_l ^ 2 * ro * mnożnik
BL_ety.Text = Format(bl, " 0.00000 ") + t
bp = dyp / długość_p ^ 2 * ro * mnożnik
BP_ety.Text = Format(bp, " 0.00000 ") + t
End Sub
Private Sub metr_opc_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles metr_opc.CheckedChanged
If metr_opc.Checked Then t = " [ G/M ] "
mnożnik = 1
współczynniki_prz_Click(sender, e)
End Sub
Private Sub milimetr_opc_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles milimetr_opc.CheckedChanged
If milimetr_opc.Checked Then t = " [ cc/mm ] "
mnożnik = 10
współczynniki_prz_Click(sender, e)
End Sub
Private Sub centymetr_opc_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles centymetr_opc.CheckedChanged
If centymetr_opc.Checked Then t = " [ cc/cm ] "
mnożnik = 100
współczynniki_prz_Click(sender, e)
End Sub
End Class
Jan Ruchel
Kraków, listopad 2010