IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
Jaroslav Trojan
Tvůrce
Avatar
Jaroslav Trojan:7.8.2016 14:28

Zdravím,
potřebuji data z jisté třídy [název je Excentrtlak ] přenést do třídy Form1 pro kreslení.
Jakým způsobem je to možné? Jde o větší množství proměnných typu Integer a Single.
Poradí mi někdo. Moc děkuji.

Odpovědět
7.8.2016 14:28
statik
Avatar
Odpovídá na Jaroslav Trojan
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...

Nahoru Odpovědět
7.8.2016 21:10
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
Honza
Člen
Avatar
Odpovídá na Jaroslav Trojan
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.

  1. Pokud Form1 nemá bez těch dat smysl, předej mu je v konstruktoru, při vytváření nové instance toho formu
  2. 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.

Nahoru Odpovědět
7.8.2016 22:39
Snadnou cestou se daleko nedostanete, je tam velká tlačenice...
Avatar
Jaroslav Trojan
Tvůrce
Avatar
Odpovídá na Honza
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.

Nahoru Odpovědět
11.8.2016 10:00
statik
Avatar
Honza
Člen
Avatar
Odpovídá na Jaroslav Trojan
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.

Nahoru Odpovědět
11.8.2016 10:09
Snadnou cestou se daleko nedostanete, je tam velká tlačenice...
Avatar
Jaroslav Trojan
Tvůrce
Avatar
Odpovídá na Honza
Jaroslav Trojan:11.8.2016 10:10

A ještě ten formulář provádí celočíselné dělení, jak se toho zbavím.

Nahoru Odpovědět
11.8.2016 10:10
statik
Avatar
Honza
Člen
Avatar
Odpovídá na Jaroslav Trojan
Honza:11.8.2016 10:11

Hoď sem kód, takhle naslepo nikdo nic moc nevymyslí...

Nahoru Odpovědět
11.8.2016 10:11
Snadnou cestou se daleko nedostanete, je tam velká tlačenice...
Avatar
Jaroslav Trojan
Tvůrce
Avatar
Odpovídá na Honza
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.
InitializeCom­ponent()
' Add any initialization after the InitializeCom­ponent() 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.Window­s.Forms.PaintE­ventArgs) Handles Me.Paint
e.Graphics.Cle­ar(BackColor)
Dim excentrtlak As Excentrtlak = New Excentrtlak()
Console.Write­Line("")
' 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.Draw­Line(p, xu, 50, 10 * aa * mx + 60, 50) : y = -0.1 * bb * my
e.Graphics.Draw­Line(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.Draw­Line(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.Draw­Line(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.Write­Line(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.Draw­Line(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.Draw­Line(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.Draw­Line(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.Draw­Line(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.Draw­Line(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.Draw­Line(p1, Nc * mx + 40, Mculim * my + 50, Ne * mx + 40, MEE * my + 50)

e.Graphics.Draw­Line(p1, Ne * mx + 40, MEE * my + 50, Ne * mx + 40, 50)
bbb = bbb / 20
e.Graphics.Draw­Line(p1, n1r * mx + 40, bbb * my + 50, n1r * mx + 40, mu1 * my + 50)
e.Graphics.Draw­Line(p1, n2r * mx + 40, bbb * my + 50, n2r * mx + 40, mu2 * my + 50)
e.Graphics.Draw­Line(p1, n3r * mx + 40, bbb * my + 50, n3r * mx + 40, mu3 * my + 50)
e.Graphics.Draw­Line(p1, n4r * mx + 40, bbb * my + 50, n4r * mx + 40, mu4 * my + 50)
e.Graphics.Draw­Line(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.Dra­wEllipse(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.Draw­Line(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.Draw­Line(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
Nahoru Odpovědět
11.8.2016 10:31
statik
Avatar
Honza
Člen
Avatar
Odpovídá na Jaroslav Trojan
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.

Nahoru Odpovědět
11.8.2016 10:57
Snadnou cestou se daleko nedostanete, je tam velká tlačenice...
Avatar
Jaroslav Trojan
Tvůrce
Avatar
Jaroslav Trojan:12.8.2016 11:14

Děkuji všem za jejich rady, kód mi již správně běží.

Nahoru Odpovědět
12.8.2016 11:14
statik
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 10 zpráv z 10.