Nouveaux forms

kobeymane Messages postés 58 Date d'inscription dimanche 29 janvier 2012 Statut Membre Dernière intervention 29 avril 2012 - 13 mars 2012 à 18:20
ehjoe Messages postés 728 Date d'inscription samedi 4 avril 2009 Statut Membre Dernière intervention 30 mars 2014 - 15 mars 2012 à 09:53
bonjours,
j'ai deux tableaux dans form1:
x(1200)=x1,x2,...x1200
y(1200)=f(x1),f(x2),...,f(x1200)

j'ai créé un nouvau form3 ou je veux tracer la courbe : y=f(x).
les variables et les tableaux créées au form1 ne sont pas reconnus par vb dans le form3 malgré que j'emploie le mot 'public' pour declarer. coment RESOUDRE ce probleme et coment TRACER cette courbe? Merci de donner des exemples didactiques pour commencer a apprendre. MERCI

8 réponses

cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
13 mars 2012 à 21:11
Salut

pas clair
si tes tableaux sont déclarés comme public
alors ils sont reconnus dans formx
donc tu n'expliques pas comme il faut
le plus simple envois la definition de tes tableaux
0
ehjoe Messages postés 728 Date d'inscription samedi 4 avril 2009 Statut Membre Dernière intervention 30 mars 2014 4
14 mars 2012 à 09:33
Bonjour kobeymane,

En effet, de mémoire VB (6, 10), n'accepte pas les variables "public" indicées.

Tu peux à la place et par exemple, mettre sur ta form d'origine, deux listBox invisible que tu charges comme tes variables, ensuite tu auras accès à la listBox depuis les autres form(s)

form1.listBox1...

Cordialement, Joe.
0
ehjoe Messages postés 728 Date d'inscription samedi 4 avril 2009 Statut Membre Dernière intervention 30 mars 2014 4
14 mars 2012 à 09:38
kobeymane, suite :

Pour le traçage de ta courbe :

Sub cercle()
 Dim r As Long = 150
 Dim ox As Long = 200
 Dim oy As Long = 200
 Dim ar As Double ' angle en radians
 Dim i As Double
 Dim sinus As Double
 Dim cosinus As Double
 Dim x As Long
 Dim y As Long
 Dim g As System.Drawing.Graphics = Me.CreateGraphics()
 Dim xy As New Bitmap(1, 1) ' pixel de traçage
 For i = 0 To 359 Step 0.1 ' ou <> pour arc
  ar = i * 3.14 / 180
  cosinus = Math.Cos(ar)
  sinus = Math.Sin(ar)
  x = r * cosinus + ox
  y = oy - r * sinus
  xy.SetPixel(0, 0, Color.Black)
  g.DrawImage(xy, New Point(x, y))
 Next i
 g.Dispose()
End Sub


Cordialement, Joe.
0
kobeymane Messages postés 58 Date d'inscription dimanche 29 janvier 2012 Statut Membre Dernière intervention 29 avril 2012
14 mars 2012 à 13:37
bonjour,
merci EHJOE pour l'exemple, mais les valeurs de variables que j'utilise pour tracer la courbe sont stockées dans des tableaux. est ce que l'exemple que tu me donnes convient à mon cas. et est ce que je dois forcément travailler avec les listbox ? et pourquoi pas les tableaux ? (car je suis un petit peu pressé), dailleurs je vous donne un extrait du programme (il est trop long) pour facilter la compréhension à SHAYW:

Public Class Form1
    Public T0, amp, moy, rap, coup, bandemin, bandemax, gain, puissmoy, puissdef As Single
    Public Cn, an, bn, phin, puls As Single
    Public ord As Short
    Public temps(1200) As Integer
    Public Cnnn(1200), phinnn(1200) As Single
    Public omegaa(1200) As Single
    Public Cnfiltre(1200), phinfiltre(1200) As Single
    Public frequ(1200) As Single
    Public A, omega, omegac, Q As Single
    Public i, j, k As Integer

If paire.Checked = True Then
            bn = 0
            paire.Enabled = False
            impaire.Enabled = False
        End If

        If impaire.Checked = True Then
            an = 0
            impaire.Enabled = False
            paire.Enabled = False
        End If

Public Function DegreeToRad(ByVal deg As Integer) As Double
        Return deg * Math.PI / 180
    End Function

If an = 0 Then
            For t = 0 To 1200
                temps(t) = t

                For k = 1 To ord
                    n = 2 * k - 1
                    Cn = Cn + 4 * amp / (n * DegreeToRad(Math.PI))

                    'sc = sc + Cn * Math.Cos((2 * DegreeToRad(Math.PI) / T0) * n * t + phin)
                Next k
                phin = -(Math.PI / 2)
                Cnnn(t) = Cn
                phinnn(t) = phin
            Next t
        End If

        If bn = 0 Then
            For t = 0 To 1200
                temps(t) = t

                For k = 1 To ord
                    n = 2 * k - 1
                    Cn = 4 * amp / (n * DegreeToRad(Math.PI))

                    'sc = sc + Cn * Math.Cos((2 * DegreeToRad(Math.PI) / T0) * n * t + phin)
                Next k
                phin = 0
                Cnnn(t) = Cn
                phinnn(t) = phin
            Next t
        End If

If passeBas.Checked = True Then

            For Me.i = 1 To 1200
                omegaa(i) = 2 * Math.PI / temps(i)
                Cnfiltre(i) = Cnnn(i) * A / Math.Pow(Math.Pow(1 - Math.Pow(omegaa(i) / omegac, 2), 2) + Math.Pow(omegaa(i) / (Q * omegac), 2), 0.5) 'l'amplitude du signal multipliée par le module de la fonction de transfert
                phinfiltre(i) = phinnn(i) - Math.Atan((omegaa(i) / (Q * omegac)) / (1 - Math.Pow(omegaa(i) / omegac, 2))) 'la phase du signal + l'argument de la fonction de transfert
            Next

        End If


cela est dans form1
et moi, à l'aides des tableaux de valeurs Cnnn()
et phinnn() et d'autres paramètres je me suis dis de crééer un tableau temps(1200) pour l'axe des abcisses et l'autre signalcarre(1200) ou je vais mettre les images en fonction du temps 'f(t)' et commeça je pourrais tracer mon graphe temporel du signal carré (t,signalcarre(t)) à l'entrée du filtre passe-bas. et de même pour la sortie en utilsant Cnfiltre() et Phinfiltre().

Maintenant que tout est claire, je veux bien que vous m'aidiez à:
UTILISER les TABLEAUX pour TRACER la courbe dans un AUTRE FORM. MERCI
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
kobeymane Messages postés 58 Date d'inscription dimanche 29 janvier 2012 Statut Membre Dernière intervention 29 avril 2012
14 mars 2012 à 13:39
le code que j'ai donné n'est que des extraits du code principal juste pour comprendre
0
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
14 mars 2012 à 14:08
Salut

comme ça est le code de form1 ?

Public Class Form1
 déclarations des strictures de données,variable
 
 If paire.Checked = True Then
            bn = 0
            paire.Enabled = False
            impaire.Enabled = False
        End If

        If impaire.Checked = True Then
            an = 0
            impaire.Enabled = False
            paire.Enabled = False
        End If

le if paire ne peut pas etre placé ici
tu obligatoirement une erreur
il doit etre dans une fonction ou sub ou event
ex
class form1
  public x as integer
  public tttt (1200) as single
  
private sub blabla()
 le code de blabla

end sub 

private function toto(x as integer) as boolean
  le code de toto 
end function
'tout doit etre écrit dans le corps des fonctions ,sub 

end class
0
kobeymane Messages postés 58 Date d'inscription dimanche 29 janvier 2012 Statut Membre Dernière intervention 29 avril 2012
15 mars 2012 à 00:53
salut
j'ai modifier mon programme pour qu'il me donne d'un seul coup la valeur de l'ordonnée et l'affecter à une case du tableau sc(1200) créé afin que lorsque je veux tracer la courbe je me sert simplement du tableau temps={1,2,3,...,1200} et du tableau sc(). j'essaye ensuite d'appliquer ça dans un dernier programme que tu m'as donné dans un post récemment mais ça tombe mal et je ne sais pas pourquoi cela m'affiche en fin de compte une ligne horizentale et c'est tout
voici le programme donc:

'module pour les declarations
Public Module Module1
    Public T0, amp, moy, rap, coup, bandemin, bandemax, gain, puissmoy, puissdef As Single
    Public Cn, an, bn, phin, puls As Single
    Public ord As Short
    Public temps(1201) As Integer
    Public Cnnn(1201), phinnn(1201) As Single
    Public omegaa(1201) As Single
    Public Cnfiltre(1201), phinfiltre(1201) As Single
    Public frequ(1201) As Single
    Public A, omega, omegac, Q As Single
    Public i, j, k As Integer
    Public sc(1200), st(1200), sds(1200), sma(1200), sba(1200) As Single


    Public Function DegreeToRad(ByVal deg As Integer) As Double
        Return deg * Math.PI / 180
    End Function

End Module

'la sub poour la saisie
Public Sub valider_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles valider.Click
T0 = CType(periode.Text, Single) / 1000
        amp = CType(amplitude.Text, Single)
        ord = CType(ordre.Text, Short)
        moy = CType(moyenne.Text, Single)
If paire.Checked = True Then
            bn = 0
            paire.Enabled = False
            impaire.Enabled = False
        End If

        If impaire.Checked = True Then
            an = 0
            impaire.Enabled = False
            paire.Enabled = False
        End If
Public Sub carre_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles carre.CheckedChanged
        Dim t, k, n As Integer


        rapport.Visible = True
        Label6.Visible = True
        Label12.Visible = True

        If an = 0 Then
'la partie calcul qui me retourne le s(t) enfin
            For t = 0 To 1200

                temps(t) = t

                For k = 1 To ord

                    n = 2 * k - 1

                    sc(t) += moy + (4 * amp / (n * DegreeToRad(Math.PI))) * Math.Cos((n * 2 * DegreeToRad(Math.PI) / T0) * temps(t) - (DegreeToRad(Math.PI / 2)))

                Next k


            Next t

        End If

        If bn = 0 Then

            For t = 0 To 1200

                temps(t) = t

                For k = 1 To ord

                    n = 2 * k - 1

                    sc(t) += moy + (4 * amp / (n * DegreeToRad(Math.PI))) * Math.Cos((n * 2 * DegreeToRad(Math.PI) / T0) * temps(t) + 0)

                Next k
                
            Next t
        End If

    End Sub
'apres avoir eu le sc(t) l'axe des ordonnées on dessine la courbe (t.sc(t))

Private Sub DrawCurves(ByVal gr As System.Drawing.Graphics, ByVal mypanel As Panel)

        Dim mypen As New Pen(Color.DarkBlue, 2)

        For iter = 0 To 1200

            ReDim Preserve vertext(iter)

            vertext(iter).X = iter

            Try

                vertext(iter).Y = Convert.ToSingle(sc(iter)) * 10000 + mypanel.Height \ 2

                If iter > 0 Then

                    gr.DrawLine(mypen, vertext(iter - 1).X, vertext(iter - 1).Y, vertext(iter).X, vertext(iter).Y)

                End If

            Catch ex As Exception

            End Try

        Next

    End Sub


    Private Sub Panel1_Paint(ByVal sender As System.Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Panel1.Paint

        DrawCurves(e.Graphics, DirectCast(sender, Panel))

    End Sub


bn=0 si un radiobutton'paire' est coché
an=0 si un radiobutton'impaire est coché
on peut pas choisir à la fois paire et impaire.

j'ai déja copié ce post dans un autre similaire qui parle du même sujet et voilà j'attends vos aides merrciii
0
ehjoe Messages postés 728 Date d'inscription samedi 4 avril 2009 Statut Membre Dernière intervention 30 mars 2014 4
15 mars 2012 à 09:53
Suite...

En fait je viens d'essayer en vb10, ça accepte les variables public indicées :

Public temps(1201) As Integer
Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
  temps(1) = 99
  Form2.Show()
End Sub
'
Sub Form2_Shown(sender As Object, e As System.EventArgs) Handles Me.Shown
  MsgBox(Form1.temps(1)) ' = 99
End Sub


Cordialement, Joe.
0
Rejoignez-nous