NOVINKA! E-learningové kurzy umělé inteligence. Nyní AI za nejlepší ceny. Zjisti více:
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!
Avatar
Jaroslav Trojan
Tvůrce
Avatar
Jaroslav Trojan:6.8.2016 7:19

Zdravím,
napsal jsem můj první kód v kreslení. Protože s tím nemám zkušenosti obracím se na fórum.
Tento kód nechce pracovat, ihned na prvním příkazu ke smazání obrazovky spadne.
Děkuji za radu.

Public Class Form1
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load

    End Sub

    Public Sub Form1_Paint(sender As Object, e As System.Windows.Forms.PaintEventArgs) Handles Me.Paint

        e.Graphics.Clear(BackColor)

        'Nastavení pole grafu  M-N
        Dim TH, ksilim, excentrD, eta, excentr, 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, MM, n5r, n4r, n3r, n2r, n1r, mu1, mu2, mu3, mu4, mu5, Ne, Nc, mu0, N As Single
        Dim vyskah0, vyskaz0, Mu, Mc As Single


        sirkab = 25 : vyskah = 55 : Rbd = 17 : plochaf = 25 : plochaf1 = 7 : Rscd = 375 : gu = 1
        silaN1 = 500 : Rsd = 375
        ksilim = 1 / (1.25 + Rscd / 420) : excentrD = 60 : eta = 1.06 : excentr = 60





        TH = ksilim * (1 - ksilim / 2) : excentrD = Math.Abs(eta * excentr)
        vystrednost = excentrD : vyskah0 = vyskah - 3 : vyskaz0 = vyskah / 2 - 3
        ' Console.Write("   excentrD=" & excentrD & "  vystrednost=" & vystrednost)
        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)
        Mu = gu * (plochaf1 * vyskaz0 - plochaf * vyskaz0) / 100 * Rscd / 10
        Mc = Mculim : Mu = Math.Abs(Mu)
        MM = Mu + (Mc - Mu) / (NU - Nc) * (NU - silaN1)
        MEE = Mu + (Mc - Mu) / (NU - Nc) - (NU - Ne)
        momentMC = Math.Abs(momentMC) : MEE = Math.Abs(MEE)
        'výběr měřítka pro X dle Ne,max , pro Y dle Mcu,lim
        aa = 100 : cc = 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
        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 > 500 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) / aa : my = (750 - 60) / bb
        kk = aa / 10
        ' 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 Drawing.Pen(BackColor.Red, 3)
        e.Graphics.DrawLine(p, -aa * mx, 30, aa * mx + 60, 30)
        e.Graphics.DrawLine(p, 40, -bb * my, 40, bb * my + 60)
        kk = aa / 10 * mx : dd = bb / 40 * my
        For i = 1 To 10
            e.Graphics.DrawLine(p, i * kk + 40, 15, i * kk + 40, 45)
        Next i
        dd = 8 * dd
        kk = bb / 10 * my
        For i = 1 To 10
            e.Graphics.DrawLine(p, -dd, i * kk + 30, dd, i * kk + 30)
        Next
        kk = bb / 10
        For i = 1 To 3
            ' Console.Write(i * kk, "   ") :' Console.WriteLine()
        Next
        For i = 1 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
        'gosub 3470
        mu4 = MM : n4r = N : n5r = Nc
        mu5 = Mc
        e.Graphics.DrawLine(p, n4r * mx + 40, mu4 * my + 30, n5r * mx + 40, mu5 * my + 30)
        N = 3 / 5 * Nc
        'gosub 3470
        n3r = N : mu3 = MM
        e.Graphics.DrawLine(p, n3r * mx + 40, mu3 * my + 30, n4r * mx + 40, mu4 * my + 30)
        N = 2 / 5 * Nc
        'gosub 3470
        n2r = N : mu2 = MM
        e.Graphics.DrawLine(p, n2r * mx + 40, mu2 * my + 30, n3r * mx + 40, mu3 * my + 30)
        N = 1 / 5 * Nc : n1r = N
        'gosub 32470
        mu1 = MM
        e.Graphics.DrawLine(p, n1r * mx + 40, mu1 * my + 30, n2r * mx + 40, mu2 * my + 30)
        N = 0 'gosub 3470
        mu0 = MM
        e.Graphics.DrawLine(p, 40, mu0 * my + 30, n1r * mx + 40, mu1 * my + 30)
        e.Graphics.DrawLine(p, Nc * mx + 40, Mc * my + 30, Ne * mx + 40, MEE * my + 30)
        e.Graphics.DrawLine(p, Ne * mx + 40, MEE * my + 30, Ne * mx + 40, 30)
        bbb = bbb / 20
        e.Graphics.DrawLine(p, n1r * mx + 40, bbb * my + 30, n1r * mx + 40, mu1 * my + 30)
        e.Graphics.DrawLine(p, n2r * mx + 40, bbb * my + 30, n2r * mx + 40, mu2 * my + 30)
        e.Graphics.DrawLine(p, n3r * mx + 40, bbb * my + 30, n3r * mx + 40, mu3 * my + 30)
        e.Graphics.DrawLine(p, n4r * mx + 40, bbb * my + 30, n4r * mx + 40, mu4 * my + 30)
        e.Graphics.DrawLine(p, n5r * mx + 40, 30, n5r * mx + 40, 30)
        rr = bb / 80 * my : nnn = silaN1 : MM = silaN1 * excentrD / 100
        e.Graphics.DrawEllipse(p, nnn * mx + 40, MM * my + 30, rr, rr)





    End Sub
End Class
Odpovědět
6.8.2016 7:19
statik
Avatar
David Oczka
Tvůrce
Avatar
Odpovídá na Jaroslav Trojan
David Oczka:6.8.2016 22:16

Hmm, Tvůj kód mi funguje bez problémů... Ačkoliv je opravdu vidět, že začínáš, ale to je vedlejší... :-)

Co Ti to píše za chybu?

 
Nahoru Odpovědět
6.8.2016 22:16
Avatar
Jaroslav Trojan
Tvůrce
Avatar
Odpovídá na David Oczka
Jaroslav Trojan:7.8.2016 9:09

ahoj, píše to : objekt není nastaven na instanci objektu
volám Form1 takto
'Nastavení pole grafu M-N
Dim e As System.Window­s.Forms.PaintE­ventArgs
Dim sender As Object
Dim form1 As Form1 = New Form1()
form1.Form1_Pa­int(sender, e)

Nahoru Odpovědět
7.8.2016 9:09
statik
Avatar
Jaroslav Trojan
Tvůrce
Avatar
Odpovídá na David Oczka
Jaroslav Trojan:7.8.2016 9:12

zdá se mi, že něco není v pořádku s instancí e.

Nahoru Odpovědět
7.8.2016 9:12
statik
Avatar
Jaroslav Trojan
Tvůrce
Avatar
Odpovídá na David Oczka
Jaroslav Trojan:7.8.2016 9:19

chci se ještě zeptat, kreslí ti to graf ?

Nahoru Odpovědět
7.8.2016 9:19
statik
Avatar
David Oczka
Tvůrce
Avatar
Odpovídá na Jaroslav Trojan
David Oczka:7.8.2016 22:32

No, je již jasné, proč Ti to spadne hned na prvním řádku.

Tím, že to voláš způsobem:

Dim e As System.Windows.Forms.PaintEventArgs
Dim sender As Object
Dim form1 As Form1 = New Form1()
form1.Form1_Paint(sender, e)

pouze deklaruješ nějakou proměnnou sender a nějakou proměnnou e, ale nikde není jejich definování hodnoty. To je důvod, proč Ti řádek:

e.Graphics.Clear(BackColor)

hlásí chybu, jakou hlásí. Proměnná e bude rozhodně null.

Trochu také nechápu, odkud voláš ten formulář (viz kód níže). Respektive, má Tvá aplikace mít více než jeden (ten hlavní) formulář?

Dim form1 As Form1 = New Form1()
form1.Form1_Paint(sender, e)

V případě, že má mít Tvá aplikace pouze jeden formulář, tak Tvůj způsob volání překreslení je bohužel naprosto špatný, nicméně zde je přístup, který používám já (Používám to sice v C#, ale přístup je tu naprosto stejný).

Ten graf budeš obnovovat nějakým způsobem, třeba časovačem v pravidelných intervalech nebo jakoukoliv jinou událost (Nevím, co má být cílem tvého projektu, v mém případě jsem použil událost na kliknutí do formuláře), a v implementaci této události zavoláš z instance hlavního formuláře (pravděpodobně Me) metodu Refresh(), která vybudí událost Paint.

Příklad mého použití:

' Počítadlo zavolání události Paint
Dim counter As Integer = 0

Private Sub Form1_Paint(sender As Object, e As PaintEventArgs) Handles MyBase.Paint
        counter += 1 ' Inkrementace
        Me.Text = counter.ToString() 'Přepis textu v hlavičce formuláře

        'Tvá implementace
End Sub

Private Sub Form1_Click(sender As Object, e As EventArgs) Handles MyBase.Click
        Me.Refresh() ' Vybuzení události Paint
End Sub

Dále nemůžu trochu unést Tvou strukturu Ifů...

aa = 100 : cc = 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
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 > 500 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

Přemýšlel jsi nad tím, kolikrát se proměnné aa a bb přepíší? Dejme si jednoduchý příklad: V případě, že proměnná cc bude rovna 10001, tak proměnná aa bude přepsána 16 krát!
Lepší přístup by bylo použít If-ElseIf-Else s tím, že když je podmínka položena, zdali je hodnota větší než nějaké číslo, tak v prvním Ifu bude porovnání s největším číslem a v dalších ElseIfech budou porovnání s hodnotami sestupně nižšími až v posledním Else vyřešíš nejnižší hodnotu a všechny ostatní...

 
Nahoru Odpovědět
7.8.2016 22:32
Avatar
Jaroslav Trojan
Tvůrce
Avatar
Odpovídá na David Oczka
Jaroslav Trojan:8.8.2016 11:55

Ahoj,
moje aplikace "ZELEZOBETON" má 5 tříd a jeden Form1. Z jedné třídy Excentrtlak jsem volal formulář
Form1, kde chci kreslit graf funkce M-N.
Není mi jasné, kam mám umístit metodu Form1_Click, dal jsem ji do třídy Excentrtlak, ale nejde to(je to červeně podtrženo) a nefunguje.
Dále do formuláře Form1_Paint jsem dal counter +Me.Text jak máš napsáno a pak nevím co znamená
"Tvá implementace".
Napsal jsem tam instanci form1 a její volání takto:
Dim form1 As Form1=New Form1()
form1.Form1_Pa­int(sender,e)
ale asi je to vše špatně, protože to nefunguje.

Nahoru Odpovědět
8.8.2016 11:55
statik
Avatar
Odpovídá na Jaroslav Trojan
Michal Štěpánek:8.8.2016 12:07

Metodu Form1_Click musíš dát překvapivě do "Form1", protože v ideálním případě by ta tvá třída neměla vůbec vědět, že existuje nějaký Form1...

Z jedné třídy Excentrtlak jsem volal formulář Form1

Jak to myslíš, volal formulář ze třídy? Když máš jen jeden formulář, tak ten se přeci spouští při spuštění programu a ne ze třídy, ne? Do třídy si pak saháš pro nějaká data a výsledky výpočtů...

Nahoru Odpovědět
8.8.2016 12:07
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
David Oczka
Tvůrce
Avatar
Odpovídá na Jaroslav Trojan
David Oczka:8.8.2016 13:12

Omlouvám, že to tak řeknu, nerad bych se Tě nejak dotknul, ale je očividné, že vůbec nerozumíš tomu, co děláš...

Metoda Form1_Click je vygenerovaná (případně Tebou vytvořená) metoda jako odezva formuláře na kliknutí, která musí být přiřazena k události Click v designeru formuláře (ať už v grafickém prostředí nebo v kódu) a musí být umístěna v těle třídy formuláře, aby fungovala.

Komentářem "Tvá implementace" jsem měla na mysli, že tam by byla umístěna tvá implementace toho grafu, zkrátka Tvůj kód, který jsi sem zaslal dříve... Navíc, to počítadlo (proměnná counter) bylo pouze jako ukázka funkcionality, ne, že to tam musí být... :-)

Jestli tedy chceš pomoct s tím, co děláš, prosím, popiš nám tady, jak má Tvá aplikace vypadat a co má dělat. Nečekej, že ji uděláme za Tebe, ale rádi Tě nasměrujeme správným směrem... ;-)

 
Nahoru Odpovědět
8.8.2016 13:12
Avatar
Jaroslav Trojan
Tvůrce
Avatar
Jaroslav Trojan:8.8.2016 15:29

Jak jsem již psal, moje aplikace ŹELEZOBETON má hlavní program Module1 a v něm se volají
instance tříd OHYB, EXCENTRTAH, EXCENTRTLAK, SMYK a potom ještě chci vyvolat formulář
Form1 pro nakreslení grafu. Všechny třídy pracují a navrhují železobetonové průřezy na uvedené druhy namáhání. Z Modulu1 jsem vyvolal instanci třídy Form1, tedy form1.Form1_Pa­int(). Potřebuji tam
také přenést všechna data ze třídy EXCENTRTLAK potřebná pro kreslení grafu.
Jak tedy správně vyvolat Form1 a přenést tam ta data z EXCENTRTLAK , to je můj problém , který zatím nevím řešit, protože jsem s formulářem Form1 ještě nikdy nepracoval.
Díky za rady, pomáhá mi to.
Nyní je potíž s počítadlem , vadí tam Dim counter As Integer=0 , tam se to seklo.

Nahoru Odpovědět
8.8.2016 15:29
statik
Avatar
MadaraCZech
Tvůrce
Avatar
Odpovídá na Jaroslav Trojan
MadaraCZech:8.8.2016 15:31

Nic proti, ale nebylo by lepší si na vytvoření té aplikaci někoho najmout ?

 
Nahoru Odpovědět
8.8.2016 15:31
Avatar
Jaroslav Trojan
Tvůrce
Avatar
Odpovídá na MadaraCZech
Jaroslav Trojan:8.8.2016 16:05

A proč někoho najímat, když už jsem skoro hotov a chybí mi jen ten graf?

Nahoru Odpovědět
8.8.2016 16:05
statik
Avatar
David Oczka
Tvůrce
Avatar
Odpovídá na Jaroslav Trojan
David Oczka:8.8.2016 16:12

A ta třída Module1 je co? Formulář nebo konzolová aplikace?

 
Nahoru Odpovědět
8.8.2016 16:12
Avatar
Jaroslav Trojan
Tvůrce
Avatar
Jaroslav Trojan:8.8.2016 16:48

Je to konzolová aplikace- hlavní program
vypadá takto

Module Module1

    Dim beton, cykl As Integer
    Dim Rbd As Single
    Dim Rbtd As Single
    Dim Eb As Single
    Dim gamab As Single
    Dim ocel As Integer
    Dim Rsd As Single
    Dim Rscd As Single
    Dim gamas, gu, z1, vyskah0, eta, excentr, plochaf, plochaf1 As Single
    Dim ret As String
    Dim ksilim, sirkab, vyskah, delka, krytia, krytia1, moment, silaN1 As Single

    ''' <summary>
    '''
    ''' </summary>
    Sub Main()
        Console.WriteLine()
        Console.WriteLine("   ŽELEZOBETON - Návrh dle ČSN 731201 ")
        Console.WriteLine()

        Console.Write("   Zadej beton-značka:  ")
        Dim beton As Integer = Console.ReadLine()
        Console.Write("   pevnost v tlaku Rbd[MPa] ? ")
        Dim Rbd As Single = Console.ReadLine()
        Console.Write("   pevnost v tahu Rbtd[MPa] ? ")
        Dim Rbtd As Single = Console.ReadLine()
        Console.Write("   modul pružnosti Eb[MPa] ?  ")
        Dim Eb As Single = Console.ReadLine()
        Console.Write("   součinitel gama,b ?  ")
        Dim gamab As Single = Console.ReadLine()
        Console.Write("   zadej ocel-značka:")
        Dim ocel As Integer = Console.ReadLine()
        Console.Write("   pevnost oceli v tahu Rsd[MPa] ?  ")
        Dim Rsd As Single = Console.ReadLine()
        Console.Write("   pevnost oceli v tlaku Rscd[MPa] ?  ")
        Dim Rscd As Single = Console.ReadLine()
        Console.Write("   součinitel gama,s ?  ")
        Dim gamas As Single = Console.ReadLine()
        Rbd = Rbd * gamab : Rbtd = Rbtd * gamab : Rsd = Rsd * gamas : Rscd = Rscd * gamas
        Dim ksilim As Single = 1 / (1.25 + Rsd / 420)

        cykl = 0
vstup:  cykl = cykl + 1
        Console.WriteLine()
        Console.Write("   Vstup PRUŘEZ: šířka B[cm], výška h[cm], délka L[m]   ")
        sirkab = Console.ReadLine()
        vyskah = Console.ReadLine()
        delka = Console.ReadLine()
        Console.Write("   zadej krytí a[cm], krytí a1[cm]   ")
        krytia = Console.ReadLine()
        krytia1 = Console.ReadLine()
        Console.Write("   zadej moment Md[kNm], normál.sílu Nd[kN]   ")
        moment = Console.ReadLine()
        silaN1 = Console.ReadLine()

        'rozhodnutí o typu namáhání
        If moment <> 0 And silaN1 = 0 Then
            'OHYB
            Dim ohyb As Ohyb = New Ohyb()
            ohyb.Navrh(vyskah, krytia, krytia1, sirkab, moment, Rbd, Rsd, Rscd)
            ohyb.Posudek(vyskah, krytia, krytia1, sirkab, moment, Rbd, Rsd, Rscd, delka, silaN1, ksilim, Rbtd, z1)
        End If
        If moment <> 0 And silaN1 > 0 Then
            'EXCENTRICKÝ  TAH
            Dim excentrtah As Excentrtah = New Excentrtah
            excentrtah.Navrh(vyskah, krytia, krytia1, sirkab, moment, Rbd, Rsd, Rscd, delka, silaN1, ksilim)
            excentrtah.Posudek(vyskah, krytia, krytia1, sirkab, moment, Rbd, Rsd, Rscd, delka, silaN1, ksilim, Rbtd)

        End If
        If moment <> 0 And silaN1 < 0 Then
            'EXCENTRICKÝ  TLAK
            Dim excentrtlak As Excentrtlak = New Excentrtlak
            excentrtlak.Navrh(vyskah, krytia, krytia1, sirkab, moment, Rbd, Rsd, Rscd, delka, silaN1, ksilim, Rbtd, Eb)
            excentrtlak.Posudek(vyskah, krytia, krytia1, sirkab, moment, Rbd, Rsd, Rscd, delka, silaN1, ksilim, Rbtd, Eb, eta, excentr, plochaf, plochaf1)
            Console.Write("   Požaduješ Graf M - N   ?  a/n   ")
            ret = Console.ReadLine()
            If ret = "a" Then
                Dim e As EventArgs, sender As Object
                Dim form1 As Form1 = New Form1()
                ' form1.Form1_Paint()
            End If

        End If
        Console.Write("   SMYKOVÁ  VÝZTUŽ ? a/n     ")
        ret = Console.ReadLine()
        If ret = "n" Then GoTo konec
        'NÁVRH NA SMYK-SMYKOVÁ VÝZTUŽ
        Dim smyk As Smyk = New Smyk()
        smyk.Navrh(gu, z1, sirkab, moment, vyskah, Rbtd, Rsd, delka)


konec:  Console.WriteLine()
        GoTo vstup
    End Sub
    Public Sub fngu(vyskah)
        If vyskah >= 60 Then
            gu = 1
        Else
            gu = 1 - 20 / (vyskah * 10 + 50) ' Console.Write("gu=" & gu)
        End If
        If gu < 0.85 Then
            gu = 0.85
        End If
    End Sub


End Module
Nahoru Odpovědět
8.8.2016 16:48
statik
Avatar
David Oczka
Tvůrce
Avatar
Odpovídá na Jaroslav Trojan
David Oczka:8.8.2016 17:04

A jsme doma... :)

Formulář tedy zavoláš pomocí:

Dim f As Form1 = New Form1()
f.ShowDialog()

zbytek je jiš pak řešeno uvnitř třídy formuláře...

Ta data (v případě, že nejde o kontinuální data, ale jednorázovou dávku) bych pak do formuláře předal pomocí konstruktoru...

 
Nahoru Odpovědět
8.8.2016 17:04
Avatar
MadaraCZech
Tvůrce
Avatar
Odpovídá na Jaroslav Trojan
MadaraCZech:8.8.2016 17:20

Protože až to bude chtít někdo upravit, tak to stejně asi bude muset napsat znovu.

 
Nahoru Odpovědět
8.8.2016 17:20
Avatar
Jaroslav Trojan
Tvůrce
Avatar
Odpovídá na David Oczka
Jaroslav Trojan:8.8.2016 18:17

Zatím díky! Vyzkouším to.

Nahoru Odpovědět
8.8.2016 18:17
statik
Avatar
Odpovídá na Jaroslav Trojan
Michal Štěpánek:9.8.2016 6:09

Je dobré, že se snažíš něco naučit, ale myslím si, že kdybys to nedělal jako konzolovku, ale jako FormAplikaci, nebo ještě lépe WPF aplikaci, ušetřil bys podle mého dost kódu na psaní, navíc by to lépe vypadalo a hlavně by se to uživateli určitě lépe ovládalo... A to nemluvím o případné potřebě z programu něco vytisknout nebo vyexportovat např. do PDFka...

Nahoru Odpovědět
9.8.2016 6:09
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
Jaroslav Trojan
Tvůrce
Avatar
Odpovídá na David Oczka
Jaroslav Trojan:10.8.2016 9:39

Ahoj,
napsal jsem ten konstruktor, ale po spuštění mi to přeteklo (Overflow) v havičce konstruktoru.
Nějaká data jsem umazal, ale nejde to stejně.
viz dole:

Public Class Form1
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load

    End Sub
    Private Sub Form1Click(sender As Object, e As EventArgs) Handles MyBase.Click
        Me.Refresh() ' vybuzení Paint události
    End Sub
    Public excentrD, eta, momentMc, momentMe, Rbd, Rbtd, Rsd, Rscd, delka, vyskah, sirkab, silaN1, plochaf
    Public plochaf1, krytia, krytia1

    Dim counter As Integer = 0
    Dim form1 As Form1 = New Form1(excentrD, eta, momentMc, momentMe, Rbd, Rbtd, Rsd, Rscd, delka, vyskah, sirkab, silaN1, plochaf, plochaf1, krytia, krytia1)
    Public Sub New(excentrD, 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.delka = delka
        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
        counter += 1
        Me.Text = counter.ToString() 'text v hlavičce formuláře
        e.Graphics.Clear(BackColor)
        '  Dim excentrtlak As Excentrtlak = New Excentrtlak()

        '          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, MM, 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 As Single


        ' sirkab = 25 : vyskah = 55 : Rbd = 17 : plochaf = 14 : plochaf1 = 3 : Rscd = 350
        'silaN1 = 500 : Rsd = 350 : krytia1 = 3 : krytia = 3
        ksilim = 1 / (1.25 + Rscd / 420)


        TH = ksilim * (1 - ksilim / 2) ' excentrD = Math.Abs(eta * excentr)
        vystrednost = excentrD : vyskah0 = vyskah - krytia : vyskaz0 = vyskah / 2 - krytia
        Console.Write("   excentrD=" & excentrD)
        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
        Console.Write("   Neu=" & Ne)
        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) : MM = 0
        MEE = Mu + (Mc - Mu) / (NU - Nc) * (NU - Ne)
        Console.Write("  Meu=" & MEE)
        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("  Ne,u=" & Ne)
        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=" & Mculim & " Ncu=" & Nc) : Console.WriteLine()
        Console.Write(" Mu=" & Mu & " MM=" & MM & " Me=" & MEE)
        Console.WriteLine("momentMC=" & momentMC & "  Meu=" & mmu) : 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) / aa : my = (730 - 60) / bb
        kk = aa / 10
        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 Drawing.Pen(BackColor.Red, 1) : xu = -0.01 * aa * mx
        e.Graphics.DrawLine(p, xu, 30, 10 * aa * mx + 60, 30) : y = -0.01 * bb * my
        e.Graphics.DrawLine(p, 40, y, 40, bb * my + 60)
        kk = aa / 10 * mx : dd = bb / 40 * my
        For i = 1 To 10
            e.Graphics.DrawLine(p, i * kk + 40, 10, i * kk + 40, 25)
        Next i
        dd = 8 * dd
        kk = bb / 10 * my : xu = 0.5 * dd
        For i = 1 To 10
            e.Graphics.DrawLine(p, -xu, i * kk + 30, xu, i * kk + 30)
        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
        'gosub 3470
        Moment(MM, N, gu, plochaf1, plochaf, Rscd, Rsd, Rbd, sirkab, krytia1, vyskah)
        mu4 = MM : n4r = N : n5r = Nc
        mu5 = Mc
        Console.WriteLine("  MM=" & MM & " Mc=" & Mc & " Nc=" & Nc & " N=" & N)
        e.Graphics.DrawLine(p, n4r * mx + 40, mu4 * my + 30, n5r * mx + 40, mu5 * my + 30)
        N = 3 / 5 * Nc
        'gosub 3470
        moment(MM, N, gu, plochaf1, plochaf, Rscd, Rsd, Rbd, sirkab, krytia1, vyskah)
        n3r = N : mu3 = MM
        Console.WriteLine("  MM=" & MM & "  N=" & N)
        e.Graphics.DrawLine(p, n3r * mx + 40, mu3 * my + 30, n4r * mx + 40, mu4 * my + 30)
        N = 2 / 5 * Nc
        'gosub 3470
        moment(MM, N, gu, plochaf1, plochaf, Rscd, Rsd, Rbd, sirkab, krytia1, vyskah)
        n2r = N : mu2 = MM
        Console.WriteLine("   MM=" & MM & "  N=" & N)
        e.Graphics.DrawLine(p, n2r * mx + 40, mu2 * my + 30, n3r * mx + 40, mu3 * my + 30)
        N = 1 / 5 * Nc : n1r = N
        'gosub 32470
        moment(MM, N, gu, plochaf1, plochaf, Rscd, Rsd, Rbd, sirkab, krytia1, vyskah)
        mu1 = MM
        Console.WriteLine("   MM=" & MM & "  N=" & N)
        e.Graphics.DrawLine(p, n1r * mx + 40, mu1 * my + 30, n2r * mx + 40, mu2 * my + 30)
        N = 0 'gosub 3470
        moment(MM, N, gu, plochaf1, plochaf, Rscd, Rsd, Rbd, sirkab, krytia1, vyskah)
        mu0 = MM
        Console.WriteLine("   M0=" & mu0 & "  N=" & N)
        e.Graphics.DrawLine(p, 40, mu0 * my + 30, n1r * mx + 40, mu1 * my + 30)
        Console.WriteLine("   Nc=" & Nc & " Mculim=" & Mculim & " Ne=" & Ne & " MEE=" & MEE)
        e.Graphics.DrawLine(p, Nc * mx + 40, Mculim * my + 30, Ne * mx + 40, MEE * my + 30)

        e.Graphics.DrawLine(p, Ne * mx + 40, MEE * my + 30, Ne * mx + 40, 30)
        bbb = bbb / 20
        e.Graphics.DrawLine(p, n1r * mx + 40, bbb * my + 30, n1r * mx + 40, mu1 * my + 30)
        e.Graphics.DrawLine(p, n2r * mx + 40, bbb * my + 30, n2r * mx + 40, mu2 * my + 30)
        e.Graphics.DrawLine(p, n3r * mx + 40, bbb * my + 30, n3r * mx + 40, mu3 * my + 30)
        e.Graphics.DrawLine(p, n4r * mx + 40, bbb * my + 30, n4r * mx + 40, mu4 * my + 30)
        e.Graphics.DrawLine(p, n5r * mx + 40, 30, n5r * mx + 40, 30)
        rr = bb / 80 * my : nnn = silaN1 : MM = silaN1 * excentrD / 100
        Console.WriteLine("  silaN1[kN]=" & nnn & "  excentrD[cm]=" & excentrD & " MM[kNm]=" & MM)
        e.Graphics.DrawEllipse(p, nnn * mx + 40, MM * my + 30, rr, rr)
        xu = nnn * mx - rr * 1.7 + 40 : y = nnn * mx + rr * 1.7 + 40
        e.Graphics.DrawLine(p, xu, MM * my + 30, y, MM * my + 30)
        xu = MM * my + rr * 0.6 + 30 : y = MM * my - rr * 0.6 + 30
        e.Graphics.DrawLine(p, nnn * mx + 40, xu, nnn * mx + 40, y)
        Console.WriteLine("   GRAF M - N  průběh:")
        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=" & MEE & "  Meu=" & mmu)

    End Sub
    Public Function Moment(MM, 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
        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

mom:    MM = gu * (sirkab * xu * (vyskah - xu) / 2 * Rbd / 10 + plochaf1 * Rscd / 10 * vyskaz0 + plochaf * Rsd / 10 * vyskaz0) / 100
        Return MM
        Console.Write("   MM=" & MM)
    End Function












End Class
Nahoru Odpovědět
10.8.2016 9:39
statik
Avatar
David Oczka
Tvůrce
Avatar
Odpovídá na Jaroslav Trojan
David Oczka:10.8.2016 10:34

Dáváš to zase špatně...

Už jsem Ti i psal, že ten counter je tam jen jako ukázka. No, pokud ten graf má být vykreslen pouze jednou a je tedy statický, tak tam nemusí být ani ta medota Form1_Click, protože událost Paint je jednou vyvolána již při otevření formuláře.

Třída toho tvého formuláře tedy bude vypadat takto:

Public Class Form1
    Public excentrD, eta, momentMc, momentMe, Rbd, Rbtd, Rsd, Rscd, delka, vyskah, sirkab, silaN1, plochaf
    Public plochaf1, krytia, krytia1

    Public Sub New(excentrD, 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.delka = delka
        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()

        '          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, MM, 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 As Single


        ' sirkab = 25 : vyskah = 55 : Rbd = 17 : plochaf = 14 : plochaf1 = 3 : Rscd = 350
        'silaN1 = 500 : Rsd = 350 : krytia1 = 3 : krytia = 3
        ksilim = 1 / (1.25 + Rscd / 420)


        TH = ksilim * (1 - ksilim / 2) ' excentrD = Math.Abs(eta * excentr)
        vystrednost = excentrD : vyskah0 = vyskah - krytia : vyskaz0 = vyskah / 2 - krytia
        Console.Write("   excentrD=" & excentrD)
        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
        Console.Write("   Neu=" & Ne)
        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) : MM = 0
        MEE = Mu + (Mc - Mu) / (NU - Nc) * (NU - Ne)
        Console.Write("  Meu=" & MEE)
        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("  Ne,u=" & Ne)
        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=" & Mculim & " Ncu=" & Nc) : Console.WriteLine()
        Console.Write(" Mu=" & Mu & " MM=" & MM & " Me=" & MEE)
        Console.WriteLine("momentMC=" & momentMC & "  Meu=" & mmu) : 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) / aa : my = (730 - 60) / bb
        kk = aa / 10
        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 Drawing.Pen(BackColor.Red, 1) : xu = -0.01 * aa * mx
        e.Graphics.DrawLine(p, xu, 30, 10 * aa * mx + 60, 30) : y = -0.01 * bb * my
        e.Graphics.DrawLine(p, 40, y, 40, bb * my + 60)
        kk = aa / 10 * mx : dd = bb / 40 * my
        For i = 1 To 10
            e.Graphics.DrawLine(p, i * kk + 40, 10, i * kk + 40, 25)
        Next i
        dd = 8 * dd
        kk = bb / 10 * my : xu = 0.5 * dd
        For i = 1 To 10
            e.Graphics.DrawLine(p, -xu, i * kk + 30, xu, i * kk + 30)
        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
        'gosub 3470
        Moment(MM, N, gu, plochaf1, plochaf, Rscd, Rsd, Rbd, sirkab, krytia1, vyskah)
        mu4 = MM : n4r = N : n5r = Nc
        mu5 = Mc
        Console.WriteLine("  MM=" & MM & " Mc=" & Mc & " Nc=" & Nc & " N=" & N)
        e.Graphics.DrawLine(p, n4r * mx + 40, mu4 * my + 30, n5r * mx + 40, mu5 * my + 30)
        N = 3 / 5 * Nc
        'gosub 3470
        Moment(MM, N, gu, plochaf1, plochaf, Rscd, Rsd, Rbd, sirkab, krytia1, vyskah)
        n3r = N : mu3 = MM
        Console.WriteLine("  MM=" & MM & "  N=" & N)
        e.Graphics.DrawLine(p, n3r * mx + 40, mu3 * my + 30, n4r * mx + 40, mu4 * my + 30)
        N = 2 / 5 * Nc
        'gosub 3470
        Moment(MM, N, gu, plochaf1, plochaf, Rscd, Rsd, Rbd, sirkab, krytia1, vyskah)
        n2r = N : mu2 = MM
        Console.WriteLine("   MM=" & MM & "  N=" & N)
        e.Graphics.DrawLine(p, n2r * mx + 40, mu2 * my + 30, n3r * mx + 40, mu3 * my + 30)
        N = 1 / 5 * Nc : n1r = N
        'gosub 32470
        Moment(MM, N, gu, plochaf1, plochaf, Rscd, Rsd, Rbd, sirkab, krytia1, vyskah)
        mu1 = MM
        Console.WriteLine("   MM=" & MM & "  N=" & N)
        e.Graphics.DrawLine(p, n1r * mx + 40, mu1 * my + 30, n2r * mx + 40, mu2 * my + 30)
        N = 0 'gosub 3470
        Moment(MM, N, gu, plochaf1, plochaf, Rscd, Rsd, Rbd, sirkab, krytia1, vyskah)
        mu0 = MM
        Console.WriteLine("   M0=" & mu0 & "  N=" & N)
        e.Graphics.DrawLine(p, 40, mu0 * my + 30, n1r * mx + 40, mu1 * my + 30)
        Console.WriteLine("   Nc=" & Nc & " Mculim=" & Mculim & " Ne=" & Ne & " MEE=" & MEE)
        e.Graphics.DrawLine(p, Nc * mx + 40, Mculim * my + 30, Ne * mx + 40, MEE * my + 30)

        e.Graphics.DrawLine(p, Ne * mx + 40, MEE * my + 30, Ne * mx + 40, 30)
        bbb = bbb / 20
        e.Graphics.DrawLine(p, n1r * mx + 40, bbb * my + 30, n1r * mx + 40, mu1 * my + 30)
        e.Graphics.DrawLine(p, n2r * mx + 40, bbb * my + 30, n2r * mx + 40, mu2 * my + 30)
        e.Graphics.DrawLine(p, n3r * mx + 40, bbb * my + 30, n3r * mx + 40, mu3 * my + 30)
        e.Graphics.DrawLine(p, n4r * mx + 40, bbb * my + 30, n4r * mx + 40, mu4 * my + 30)
        e.Graphics.DrawLine(p, n5r * mx + 40, 30, n5r * mx + 40, 30)
        rr = bb / 80 * my : nnn = silaN1 : MM = silaN1 * excentrD / 100
        Console.WriteLine("  silaN1[kN]=" & nnn & "  excentrD[cm]=" & excentrD & " MM[kNm]=" & MM)
        e.Graphics.DrawEllipse(p, nnn * mx + 40, MM * my + 30, rr, rr)
        xu = nnn * mx - rr * 1.7 + 40 : y = nnn * mx + rr * 1.7 + 40
        e.Graphics.DrawLine(p, xu, MM * my + 30, y, MM * my + 30)
        xu = MM * my + rr * 0.6 + 30 : y = MM * my - rr * 0.6 + 30
        e.Graphics.DrawLine(p, nnn * mx + 40, xu, nnn * mx + 40, y)
        Console.WriteLine("   GRAF M - N  průběh:")
        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=" & MEE & "  Meu=" & mmu)

    End Sub
    Public Function Moment(MM, 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
        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

mom:
        MM = gu * (sirkab * xu * (vyskah - xu) / 2 * Rbd / 10 + plochaf1 * Rscd / 10 * vyskaz0 + plochaf * Rsd / 10 * vyskaz0) / 100
        Return MM
        Console.Write("   MM=" & MM)
    End Function
End Class

A formulář jsi přece chtěl volat z té konzolové aplikace, tak proč jsi se jej snažil volat uvnitř formuláře samotného? O_o

Takto nějak to provedeš:

Module Module1
    Sub Main()
        Dim f As Form1 = New Form1(Zde budou tvé proměnné)
        f.ShowDialog()
    End Sub
End Module

A ještě bych Ti doporučil, abys do toho konstuktoru přidal datové typy těch vstupních parametrů, protože jinak Tě čeká přetypování z datového typu object.

PS: Pokud Ti to pak bude hlásit chybu, že nemáš nadefinovanou metodu pro událost Load nebo Click, tak je z designeru odstraň. Spíše bych Ti doporučil odstranit je z designeru jako první.

PPS: Také bych Ti doporučil nějaké samostudium než budeš pokračovat dál. Protože takhle to prostě nejde...

 
Nahoru Odpovědět
10.8.2016 10:34
Avatar
Jaroslav Trojan
Tvůrce
Avatar
Odpovídá na David Oczka
Jaroslav Trojan:10.8.2016 14:05

Formulář vypadá přesně dle Tvého, ale nejde do konstruktoru vložit datové typy parametrů, hlásí to, že je již deklarováno.
Volám formulář tak jak doporučuješ , včetně 15 parametrů. Spustí se , ale data se nepřenesou.[code

Public Class Form1
    Public excentrD, eta, momentMc, momentMe, Rbd, Rbtd, Rsd, Rscd, delka, vyskah, sirkab, silaN1, plochaf
    Public plochaf1, krytia, krytia1

    Public Sub New(excentrD, 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()

        '          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, MM, 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 As Single


        ' sirkab = 25 : vyskah = 55 : Rbd = 17 : plochaf = 14 : plochaf1 = 3 : Rscd = 350
        'silaN1 = 500 : Rsd = 350 : krytia1 = 3 : krytia = 3
        ksilim = 1 / (1.25 + Rscd / 420)


        TH = ksilim * (1 - ksilim / 2) ' excentrD = Math.Abs(eta * excentr)
        vystrednost = excentrD : vyskah0 = vyskah - krytia : vyskaz0 = vyskah / 2 - krytia
        Console.Write("   excentrD=" & excentrD)
        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
        Console.Write("   Neu=" & Ne)
        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) : MM = 0
        MEE = Mu + (Mc - Mu) / (NU - Nc) * (NU - Ne)
        Console.Write("  Meu=" & MEE)
        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("  Ne,u=" & Ne)
        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=" & Mculim & " Ncu=" & Nc) : Console.WriteLine()
        Console.Write(" Mu=" & Mu & " MM=" & MM & " Me=" & MEE)
        Console.WriteLine("momentMC=" & momentMC & "  Meu=" & mmu) : 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) / aa : my = (730 - 60) / bb
        kk = aa / 10
        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 Drawing.Pen(BackColor.Red, 1) : xu = -0.01 * aa * mx
        e.Graphics.DrawLine(p, xu, 30, 10 * aa * mx + 60, 30) : y = -0.01 * bb * my
        e.Graphics.DrawLine(p, 40, y, 40, bb * my + 60)
        kk = aa / 10 * mx : dd = bb / 40 * my
        For i = 1 To 10
            e.Graphics.DrawLine(p, i * kk + 40, 10, i * kk + 40, 25)
        Next i
        dd = 8 * dd
        kk = bb / 10 * my : xu = 0.5 * dd
        For i = 1 To 10
            e.Graphics.DrawLine(p, -xu, i * kk + 30, xu, i * kk + 30)
        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
        'gosub 3470
        Moment(MM, N, gu, plochaf1, plochaf, Rscd, Rsd, Rbd, sirkab, krytia1, vyskah)
        mu4 = MM : n4r = N : n5r = Nc
        mu5 = Mc
        Console.WriteLine("  MM=" & MM & " Mc=" & Mc & " Nc=" & Nc & " N=" & N)
        e.Graphics.DrawLine(p, n4r * mx + 40, mu4 * my + 30, n5r * mx + 40, mu5 * my + 30)
        N = 3 / 5 * Nc
        'gosub 3470
        Moment(MM, N, gu, plochaf1, plochaf, Rscd, Rsd, Rbd, sirkab, krytia1, vyskah)
        n3r = N : mu3 = MM
        Console.WriteLine("  MM=" & MM & "  N=" & N)
        e.Graphics.DrawLine(p, n3r * mx + 40, mu3 * my + 30, n4r * mx + 40, mu4 * my + 30)
        N = 2 / 5 * Nc
        'gosub 3470
        Moment(MM, N, gu, plochaf1, plochaf, Rscd, Rsd, Rbd, sirkab, krytia1, vyskah)
        n2r = N : mu2 = MM
        Console.WriteLine("   MM=" & MM & "  N=" & N)
        e.Graphics.DrawLine(p, n2r * mx + 40, mu2 * my + 30, n3r * mx + 40, mu3 * my + 30)
        N = 1 / 5 * Nc : n1r = N
        'gosub 32470
        Moment(MM, N, gu, plochaf1, plochaf, Rscd, Rsd, Rbd, sirkab, krytia1, vyskah)
        mu1 = MM
        Console.WriteLine("   MM=" & MM & "  N=" & N)
        e.Graphics.DrawLine(p, n1r * mx + 40, mu1 * my + 30, n2r * mx + 40, mu2 * my + 30)
        N = 0 'gosub 3470
        Moment(MM, N, gu, plochaf1, plochaf, Rscd, Rsd, Rbd, sirkab, krytia1, vyskah)
        mu0 = MM
        Console.WriteLine("   M0=" & mu0 & "  N=" & N)
        e.Graphics.DrawLine(p, 40, mu0 * my + 30, n1r * mx + 40, mu1 * my + 30)
        Console.WriteLine("   Nc=" & Nc & " Mculim=" & Mculim & " Ne=" & Ne & " MEE=" & MEE)
        e.Graphics.DrawLine(p, Nc * mx + 40, Mculim * my + 30, Ne * mx + 40, MEE * my + 30)

        e.Graphics.DrawLine(p, Ne * mx + 40, MEE * my + 30, Ne * mx + 40, 30)
        bbb = bbb / 20
        e.Graphics.DrawLine(p, n1r * mx + 40, bbb * my + 30, n1r * mx + 40, mu1 * my + 30)
        e.Graphics.DrawLine(p, n2r * mx + 40, bbb * my + 30, n2r * mx + 40, mu2 * my + 30)
        e.Graphics.DrawLine(p, n3r * mx + 40, bbb * my + 30, n3r * mx + 40, mu3 * my + 30)
        e.Graphics.DrawLine(p, n4r * mx + 40, bbb * my + 30, n4r * mx + 40, mu4 * my + 30)
        e.Graphics.DrawLine(p, n5r * mx + 40, 30, n5r * mx + 40, 30)
        rr = bb / 80 * my : nnn = silaN1 : MM = silaN1 * excentrD / 100
        Console.WriteLine("  silaN1[kN]=" & nnn & "  excentrD[cm]=" & excentrD & " MM[kNm]=" & MM)
        e.Graphics.DrawEllipse(p, nnn * mx + 40, MM * my + 30, rr, rr)
        xu = nnn * mx - rr * 1.7 + 40 : y = nnn * mx + rr * 1.7 + 40
        e.Graphics.DrawLine(p, xu, MM * my + 30, y, MM * my + 30)
        xu = MM * my + rr * 0.6 + 30 : y = MM * my - rr * 0.6 + 30
        e.Graphics.DrawLine(p, nnn * mx + 40, xu, nnn * mx + 40, y)
        Console.WriteLine("   GRAF M - N  průběh:")
        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=" & MEE & "  Meu=" & mmu)

    End Sub
    Public Function Moment(MM, 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
        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

mom:
        MM = gu * (sirkab * xu * (vyskah - xu) / 2 * Rbd / 10 + plochaf1 * Rscd / 10 * vyskaz0 + plochaf * Rsd / 10 * vyskaz0) / 100
        Return MM
        Console.Write("   MM=" & MM)
    End Function
End Class
Zkoušel jsem volat Form1 i ze třídy EXCENTRTLAK  , výsledek  byl stejný, žádná data.
Nahoru Odpovědět
10.8.2016 14:05
statik
Avatar
Odpovídá na Jaroslav Trojan
Michal Štěpánek:11.8.2016 9:08

A v tom formuláři chceš data vypisovat kam? Jak ty kontrolky plníš?

Nahoru Odpovědět
11.8.2016 9:08
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
Jaroslav Trojan
Tvůrce
Avatar
Odpovídá na Michal Štěpánek
Jaroslav Trojan:11.8.2016 9:48

Chci ta data dál zpracovat, počítat s nimi další výsledky.
Nevím co myslíš " ty kontrolky plníš" , co to je?

Nahoru Odpovědět
11.8.2016 9:48
statik
Avatar
Odpovídá na Jaroslav Trojan
Michal Štěpánek:11.8.2016 10:56

Původně jsem si myslel, že tam máš nějaké labely, do kterých se ta data vypisují, ale pak jsem si uvědomil, že tam chceš kreslit do grafu. Zkusil sis nějak ty hodnoty předávané do Form1 zobrazit? Zkus si tam dát pár labelů a do nich naplnit ty hodnoty, které "předáváš" tím kostruktorem, abys zjistil, jaká data se v tom formu vůbec objevují

Nahoru Odpovědět
11.8.2016 10:56
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
Jaroslav Trojan
Tvůrce
Avatar
Jaroslav Trojan:12.8.2016 11:19

Děkuji Davidovi a Michalovi za jejich pomoc. Velmi mi pomohli, něco jsem se naučil.
D í k y !

Nahoru Odpovědět
12.8.2016 11:19
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 25 zpráv z 25.