Diskuze: VB NET přenesení dat do Form1
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
Michal Štěpánek:7.8.2016 21:10
musíš si ve formu vytvořit instanci té třídy a pak můžeš používat metody a public proměnné té třídy...
Honza:7.8.2016 22:39
Ahoj, bez detailnější znalosti toho co potřebuješ se radí těžko. Ale obecně bych doporučil 2 cesty jak data do Form1 předat.
- Pokud Form1 nemá bez těch dat smysl, předej mu je v konstruktoru, při vytváření nové instance toho formu
- Pokud máš vytvořený form a data tam ptořebuješ hrnout průběžně až po vytvoření instance, udělej si na to property nebo public funkci.
Pokud jde o větší množství proměnných (a počet těch proměnných se nemění), doporučoval bych zabalit je do nějaké struktury, anebo předávat celou instanci té třídy Excentrtlak. Pokud bys je přidával po jednom, byl by v tom asi pěkný guláš.
Jak zmiňoval Michal public proměnnou, to bych moc nedoporučovat. To už si tam radši udělej tu property. Příjde mi to takové nepěkné a můžeš si pak někde zadělat na problém. Je to ale jen můj názor, fungovat ti ot taky bude.
Jaroslav Trojan:11.8.2016 10:00
Data jsem dal do konstruktoru třídy Form1 a nešlo to, nic se nepředalo,
žádná data.
Tak jsem zkusil ve Form1 vytvořit instanci třídy Excentrtlak,kde ta data
jsou. Také se do Form1nepřenesla.
Jsou to data Public. Tak tomu nerozumím.
Honza:11.8.2016 10:09
Pokud vytvoříš ve Form1 instanci třídy Excentrtlak tak se ti vytvoří prázdná instance bez dat. Ale předání do konstruktoru by tu mělo fungovat. Hoď sem kód ve kterém to předáváš do toho konstruktoru a kde to pak ve Form1 čteš. Někde se ti tam asi vloudila chybka.
Jaroslav Trojan:11.8.2016 10:10
A ještě ten formulář provádí celočíselné dělení, jak se toho zbavím.
Honza:11.8.2016 10:11
Hoď sem kód, takhle naslepo nikdo nic moc nevymyslí...
Jaroslav Trojan:11.8.2016 10:31
Imports System.Drawing
Public Class Form1
Public excentrD, eta, momentMc, momentMe, Rbd, Rbtd, Rsd, Rscd, vyskah, sirkab,
silaN1, plochaf As Single
Public plochaf1, krytia, krytia1, MM, N, gu As Single
Public Sub New(excentrD, eta, momentMC, momentMe, Rbd, Rbtd, Rsd, Rscd,
vyskah, sirkab, silaN1, plochaf, plochaf1, krytia, krytia1)
'This call Is required by the designer.
InitializeComponent()
' Add any initialization after the InitializeComponent() call.
Me.excentrD = excentrD
Me.eta = eta
Me.momentMc = momentMC
Me.momentMe = momentMe
Me.Rbd = Rbd
Me.Rbtd = Rbtd
Me.Rsd = Rsd
Me.Rscd = Rscd
Me.vyskah = vyskah
Me.sirkab = sirkab
Me.silaN1 = silaN1
Me.plochaf = plochaf
Me.plochaf1 = plochaf1
Me.krytia = krytia
Me.krytia1 = krytia1
End Sub
Public Sub Form1_Paint(sender As Object, e As
System.Windows.Forms.PaintEventArgs) Handles Me.Paint
e.Graphics.Clear(BackColor)
Dim excentrtlak As Excentrtlak = New Excentrtlak()
Console.WriteLine("")
' Nastavení pole grafu M-N
Dim TH, ksilim, excentrD, vystrednost, momentMC, Nb As Single
Dim sirkab, vyskah, Rbd, NS, plochaf, plochaf1, Rscd, NU, gu, MEE, Mculim, Rsd
As Single
Dim aa, bb, cc, bbb, mx, my, kk, rr, nnn, dd As Integer
Dim silaN1, n5r, n4r, n3r, n2r, n1r, mu1, mu2, mu3, mu4, mu5, Ne, Nc, mu0, N As
Single
Dim vyskah0, vyskaz0, Mu, Mc, krytia1, krytia, xu, y, mmu, MMn As Single
'sirkab = 25 : vyskah = 55 : Rbd = 17 : plochaf = 14 : plochaf1 = 3 : Rscd =
350
'silaN1 = 500 : Rsd = 350 : krytia1 = 3 : krytia = 3 : excentrD = 53
ksilim = 1 / (1.25 + Rscd / 420)
TH = ksilim * (1 - ksilim / 2)
vystrednost = excentrD : vyskah0 = vyskah - krytia : vyskaz0 = vyskah / 2 -
krytia
Console.WriteLine(" excentrD=" & excentrD & " eta=" & eta & "
momentMc=" & momentMC & " momentMe,u=" & momentMe)
Console.WriteLine(" Rbd=" & Rbd & " Rbtd=" & Rbtd & " Rsd="
& Rsd & " Rscd=" & Rscd & " výškah=" & vyskah)
Console.WriteLine(" šířkab=" & sirkab & " sílaN1=" & silaN1
& " plochaF=" & plochaf & " plochaF1=" & plochaf1)
Console.WriteLine(" kryti a=" & krytia & " kryti a1=" & krytia1)
If vyskah >= 60 Then
gu = 1
Else
gu = 1 - 20 / (10 * vyskah + 50)
End If
If gu < 0.85 Then gu = 0.85
Nb = sirkab * vyskah * Rbd / 10
NS = (plochaf + plochaf1) * Rscd / 10 : NU = gu * (Nb + NS)
Nc = gu * (ksilim * sirkab * vyskah0 * Rbd / 10 + plochaf1 * Rscd / 10 - plochaf
* Rsd / 10)
Ne = gu * (0.8 * Nb + NS) 'unosnost Ne,u
Mculim = gu * (ksilim / 2 * sirkab * vyskah0 / 100 * (vyskah - ksilim * vyskah0)
* Rbd / 10)
Mculim += gu * (plochaf1 * Rscd / 10 * vyskaz0 / 100 + plochaf * Rsd / 10 *
vyskaz0 / 100)
'malá excentricita
Mu = gu * (plochaf1 * vyskaz0 - plochaf * vyskaz0) / 100 * Rscd / 10 'malá
exc-jen betonu
Mc = Mculim : Mu = Math.Abs(Mu) ' Ncu,lim=Nc
mmu = Mu + (Mc - Mu) / (NU - Nc) * (NU - silaN1)
MEE = Mu + (Mc - Mu) / (NU - Nc) * (NU - Ne)
momentMC = Math.Abs(Mc) : MEE = Math.Abs(MEE)
If silaN1 < Nc Then
'velká excentricita
MEE = Mu + (Mc - Mu) / (NU - Nc) * (NU - Ne)
End If
'výběr měřítka pro X dle Ne,max , pro Y dle Mcu,lim
aa = 100 : cc = NU
Console.Write(" Nmax,u=" & NU)
If cc > 100 Then aa = 200
If cc > 200 Then aa = 300
If cc > 300 Then aa = 400
If cc > 400 Then aa = 500
If cc > 500 Then aa = 600
If cc > 600 Then aa = 700
If cc > 700 Then aa = 800
If cc > 800 Then aa = 900
If cc > 900 Then aa = 1000
If cc > 1000 Then aa = 2000
If cc > 2000 Then aa = 3000
If cc > 3000 Then aa = 4000
If cc > 4000 Then aa = 5000
If cc > 5000 Then aa = 7000
If cc > 7000 Then aa = 10000
If cc > 10000 Then aa = 15000
cc = Mculim : bb = 50
Console.Write(" Mcu,lim=" & Mculim) : Console.WriteLine()
Console.Write(" Mu=" & Mu & " Me,u=" & MEE)
Console.WriteLine()
If cc > 50 Then bb = 100
If cc > 100 Then bb = 200
If cc > 200 Then bb = 300
If cc > 300 Then bb = 400
If cc > 400 Then bb = 750
If cc > 750 Then bb = 1000
If cc > 1000 Then bb = 1500
If cc > 1500 Then bb = 2000
If cc > 2000 Then bb = 2500
If cc > 2500 Then bb = 3000
If cc > 3000 Then bb = 4000
If cc > 4000 Then bb = 5000
If cc > 5000 Then bb = 7000
If cc > 7000 Then bb = 9000
bbb = bb
mx = (1350 - 60) : mx = mx / aa : Console.Write(" mx=" & mx & " aa="
& aa)
my = (730 - 60) : my = my / bb : Console.Write(" my=" & my & " bb="
& bb)
kk = aa / 10 : Console.Write(" kk=" & kk)
Console.Write(" 0.0")
For i = 1 To 10
Console.Write(" " & kk * i)
Next
Console.WriteLine(" Normálná síla Nd[kN]")
Dim p As New Pen(Color.Black, 1) : xu = -0.1 * aa * mx
e.Graphics.DrawLine(p, xu, 50, 10 * aa * mx + 60, 50) : y = -0.1 * bb * my
e.Graphics.DrawLine(p, 40, y, 40, bb * my + 60)
kk = aa / 10 * mx : dd = bb / 40 * my : Console.Write(" kk=" & kk & "
dd=" & dd)
For i = 1 To 10
e.Graphics.DrawLine(p, i * kk + 40, 10, i * kk + 40, 40)
Next i
dd = 8 * dd
kk = bb / 10 * my : xu = 0.25 * dd + 40
For i = 1 To 10
e.Graphics.DrawLine(p, -xu, i * kk + 50, xu, i * kk + 50)
Next
kk = bb / 10
For i = 1 To 3
Console.Write(i * kk, " ") : Console.WriteLine()
Next
For i = 4 To 6
Console.Write(i * kk) : Console.WriteLine()
Next
For i = 7 To 9
Console.Write(i * kk) : Console.WriteLine()
Next
Console.WriteLine(bb) : Console.Write(" Mu[kNm]")
N = 4 / 5 * Nc
Dim p1 As New Pen(Color.Red, 3)
Moment(N, gu, plochaf1, plochaf, Rscd, Rsd, Rbd, sirkab, krytia1, vyskah)
mu4 = MM : n4r = N : n5r = Nc
mu5 = Mc
Console.WriteLine(" MM=" & mu4 & " Mc=" & Mc & " Nc=" & Nc
& " N=" & N)
e.Graphics.DrawLine(p1, n4r * mx + 40, mu4 * my + 50, n5r * mx + 40, mu5 * my
+ 50)
N = 3 / 5 * Nc
Moment(N, gu, plochaf1, plochaf, Rscd, Rsd, Rbd, sirkab, krytia1, vyskah)
n3r = N : mu3 = MM
Console.WriteLine(" MM=" & mu3 & " N=" & N)
e.Graphics.DrawLine(p1, n3r * mx + 40, mu3 * my + 50, n4r * mx + 40, mu4 * my
+ 50)
N = 2 / 5 * Nc
Moment(N, gu, plochaf1, plochaf, Rscd, Rsd, Rbd, sirkab, krytia1, vyskah)
n2r = N : mu2 = MM
Console.WriteLine(" MM=" & mu2 & " N=" & N)
e.Graphics.DrawLine(p1, n2r * mx + 40, mu2 * my + 50, n3r * mx + 40, mu3 * my
+ 50)
N = 1 / 5 * Nc : n1r = N
Moment(N, gu, plochaf1, plochaf, Rscd, Rsd, Rbd, sirkab, krytia1, vyskah)
mu1 = MM
Console.WriteLine(" MM=" & mu1 & " N=" & N)
e.Graphics.DrawLine(p1, n1r * mx + 40, mu1 * my + 50, n2r * mx + 40, mu2 * my
+ 50)
N = 0
Moment(N, gu, plochaf1, plochaf, Rscd, Rsd, Rbd, sirkab, krytia1, vyskah)
mu0 = MM
Console.WriteLine(" M0=" & mu0 & " N=" & N)
e.Graphics.DrawLine(p1, 40, mu0 * my + 50, n1r * mx + 40, mu1 * my + 50)
Console.WriteLine(" Ncu,lim=" & Nc & " Mculim=" & Mculim & "
Ne=" & Ne & " Me,u=" & MEE)
e.Graphics.DrawLine(p1, Nc * mx + 40, Mculim * my + 50, Ne * mx + 40, MEE * my
+ 50)
e.Graphics.DrawLine(p1, Ne * mx + 40, MEE * my + 50, Ne * mx + 40, 50)
bbb = bbb / 20
e.Graphics.DrawLine(p1, n1r * mx + 40, bbb * my + 50, n1r * mx + 40, mu1 * my
+ 50)
e.Graphics.DrawLine(p1, n2r * mx + 40, bbb * my + 50, n2r * mx + 40, mu2 * my
+ 50)
e.Graphics.DrawLine(p1, n3r * mx + 40, bbb * my + 50, n3r * mx + 40, mu3 * my
+ 50)
e.Graphics.DrawLine(p1, n4r * mx + 40, bbb * my + 50, n4r * mx + 40, mu4 * my
+ 50)
e.Graphics.DrawLine(p1, n5r * mx + 40, 50, n5r * mx + 40, 50)
rr = bb / 80 * my : nnn = silaN1 : MMn = silaN1 * excentrD / 100
Console.WriteLine(" silaN1[kN]=" & nnn & " excentrD[cm]=" & excentrD
& " MMn[kNm]=Nd*ed=" & MMn)
e.Graphics.DrawEllipse(p1, nnn * mx + 40, MMn * my + 50, rr, rr)
xu = nnn * mx - rr * 1.7 + 40 : y = nnn * mx + rr * 1.7 + 40
e.Graphics.DrawLine(p1, xu, MMn * my + 50, y, MMn * my + 50)
xu = MMn * my + rr * 0.6 + 50 : y = MMn * my - rr * 0.6 + 50
e.Graphics.DrawLine(p1, nnn * mx + 40, xu, nnn * mx + 40, y) :
Console.WriteLine()
Console.WriteLine(" GRAF M - N průběh:") : Console.WriteLine()
Console.WriteLine(" N0r=" & N & " Mu0=" & mu0)
Console.WriteLine(" N1r=" & n1r & " Mu1=" & mu1)
Console.WriteLine(" N2r=" & n2r & " Mu2=" & mu2)
Console.WriteLine(" N3r=" & n3r & " Mu3=" & mu3)
Console.WriteLine(" N4r=" & n4r & " Mu4=" & mu4)
Console.WriteLine(" Ncu,lim=" & Nc & " Mcu,lim=" & Mculim)
Console.WriteLine(" Ne,max=" & NU & " Me,u=" & MEE & " MMu=Me'="
& mmu)
End Sub
Public Function Moment(N, gu, plochaf1, plochaf, Rscd, Rsd, Rbd, sirkab,
krytia1, vyskah)
Dim xu, vyskaz0, ar As Single
xu = (N / gu - plochaf1 * Rscd / 10 + plochaf * Rsd / 10) / (sirkab * Rbd /
10)
vyskaz0 = vyskah / 2 - krytia1
Console.Write(" xu=" & xu & " vyskaz0=" & vyskaz0 & "gu=" &
gu)
If xu >= 2 * krytia1 Then GoTo mom
ar = (N / gu - 2 * krytia1 * sirkab * Rbd / 10 + plochaf * Rsd / 10) * 10 /
Rscd
If ar >= 0 Then xu = 2 * krytia1 : plochaf1 = ar : GoTo mom
xu = (N / gu + plochaf * Rsd / 10) / (sirkab * Rbd / 10) : plochaf1 = 0
Console.Write(" xu=" & xu)
mom:
MM = gu * (sirkab * xu * (vyskah - xu) / 2 * Rbd / 10 + plochaf1 * Rscd / 10 *
vyskaz0 + plochaf * Rsd / 10 * vyskaz0) / 100
Console.Write(" MM=" & MM)
Return MM
End Function
End Class
A ten Form1 volám ze třídy Excentrtlak takto:
If lambdab > lambda And delka * 100 / sirkab > 10.1 Then
Console.WriteLine(" nutno posoudit ve směru b:lambda b=" & lambdab & ">lambda h=" & lambda & " and délka*100/šířka b=" & delka * 100 / sirkab & ">10.1")
Else
Console.WriteLine(" průřez vyhovuje: lambda b=" & lambdab & "<lambda h=" & lambda & " and délka*100/šířka b=" & delka * 100 / sirkab & "<10.1")
End If
konec2:
konec:
Console.Write(" Požaduješ GRAF M - N ? a/n ")
ret = Console.ReadLine()
If ret = "a" Then
Dim f As Form1 = New Form1(excentrD, eta, momentMC, momentMe, Rbd, Rbtd, Rsd, Rscd, vyskah, sirkab, silaN1, plochaf, plochaf1, krytia, krytia1)
f.ShowDialog()
End If
End Sub
End Class
Honza:11.8.2016 10:57
Vypadá to že se jedná o duplicitní vlákno: http://www.itnetwork.cz/…7a5737832c15
Jinak doporučil bych ti to z gruntu přepsat, protože kromě toho že se to špatně ladí, až po tobě bude někdo chtít udělat sebemenší změnu, budeš dost nešťastný člověk. Hlavně přestaň používat goto, to je přežitek, zásadně zhoršuje čitelnost kódu a může vést k dost neočekávaným výsledkům.
Každopádně, pokud si seš jistý že při vytváření nové instance Form1 ty parametry obsahují data (to zjistíš pomocí zarážky a debugování na řádku Dim f As Form1... ) tak při čtení v konstruktoru je tam musíš mít.
Děkuji všem za jejich rady, kód mi již správně běží.
Zobrazeno 10 zpráv z 10.