Diagramm

  • VB.NET

Es gibt 22 Antworten in diesem Thema. Der letzte Beitrag () ist von Adi.

    ]Hallo Zusammen

    Erstens möchte ich mich Vorstellen

    Ich bin Adi und neu in diesen Forum,

    VB Anfänger


    Jetzt meine Frage XY Werte kommen aus TextBoxen was muss ich als XY angeben das ich meine Werte aus TextBox bekomme

    Das Diagramm soll wie auf den Bild aussehen



    Danke in Voraus und bitte nicht gleich Tod schlagen wen ich einen Fehler oder Verstoß gemacht habe , bin neu und Anfänger.

    Gruß Adi

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „Adi“ ()

    Ich verstehe deine Frage jetzt nicht ganz...
    was genau willst du erreichen? Wo benötigst du Hilfe?
    Mfg: Gather
    Private Nachrichten bezüglich VB-Fragen werden Ignoriert!


    Hallo Gather
    Ich habe ein kleines rechen Programm für bestimmte Drücke geschrieben.
    Das Ergebnis wird in TextBox geschrieben nun möchte ich das Ergebnis in Diagramm anzeigen.
    Wenn du möchtest kann ich dir das Projekt schicken Posten möchte ich den Salat nicht Lach…..
    Gruß Adi
    Willkomemn im Forum.

    Adi schrieb:

    Posten möchte ich den Salat
    als angehängtes ZIP.
    Hier lacht keiner. :D
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Geh mal im Projektmappen Explorer auf Projekt, dann Links im TabControl auf Kompilieren und dann legst Option Strict in der ComboBox auf On. Anschließend behebe alle Fehler.
    Und geh im Menü von Visual Studio auf Extras > Optionen und dann bei "Projekte und Projektmappen" unter VB-Standard machst du wieder Option Strict auf On.
    Mfg
    Vincent

    Das sieht doch schonmal ganz gut aus :thumbsup:
    Allerdings musst du dir sauberes Programmieren angewöhnen. Dazu gehört die Bennenung der Steuerelemente. Oder kannst du mir auf Anhieb sagen, was in TextBox12 drin steht? Würde die Textbox aber txt_druckflaeche heißen, wüsste jeder sofort, dass da die Druckfläche reinkommt. Etwas anderes, unverzeihliches, ist, dass du mit Labelsrechnest:

    VB.NET-Quellcode

    1. TextBox20.Text = CStr(CDbl((CDbl(Label34.Text) * CDbl(TextBox10.Text)) / CDbl(TextBox13.Text)))


    Einigermaßen sauber sähe die Zeile so aus: (Aber bennene die TextBoxen!)

    VB.NET-Quellcode

    1. TextBox20.Text = (3.5 * Double.Parse(TextBox10.Text) / Double.Parse(TextBox13.Text)).ToString


    Aber da das ein ganzer Block ist, musst du doch alles nur einmal konvertieren:
    Dein Code:

    VB.NET-Quellcode

    1. TextBox14.Text = CStr(CDbl((CDbl(Label28.Text) * CDbl(TextBox10.Text)) / CDbl(TextBox13.Text)))
    2. TextBox15.Text = CStr(CDbl((CDbl(Label29.Text) * CDbl(TextBox10.Text)) / CDbl(TextBox13.Text)))
    3. TextBox16.Text = CStr(CDbl((CDbl(Label30.Text) * CDbl(TextBox10.Text)) / CDbl(TextBox13.Text)))
    4. TextBox17.Text = CStr(CDbl((CDbl(Label31.Text) * CDbl(TextBox10.Text)) / CDbl(TextBox13.Text)))
    5. TextBox18.Text = CStr(CDbl((CDbl(Label32.Text) * CDbl(TextBox10.Text)) / CDbl(TextBox13.Text)))
    6. TextBox19.Text = CStr(CDbl((CDbl(Label33.Text) * CDbl(TextBox10.Text)) / CDbl(TextBox13.Text)))
    7. TextBox20.Text = CStr(CDbl((CDbl(Label34.Text) * CDbl(TextBox10.Text)) / CDbl(TextBox13.Text)))
    8. TextBox21.Text = CStr(CDbl((CDbl(Label35.Text) * CDbl(TextBox10.Text)) / CDbl(TextBox13.Text)))
    9. TextBox22.Text = CStr(CDbl((CDbl(Label36.Text) * CDbl(TextBox10.Text)) / CDbl(TextBox13.Text)))
    10. TextBox23.Text = CStr(CDbl((CDbl(Label37.Text) * CDbl(TextBox10.Text)) / CDbl(TextBox13.Text)))
    11. TextBox24.Text = CStr(CDbl((CDbl(Label38.Text) * CDbl(TextBox10.Text)) / CDbl(TextBox13.Text)))
    12. TextBox25.Text = CStr(CDbl((CDbl(Label39.Text) * CDbl(TextBox10.Text)) / CDbl(TextBox13.Text)))

    Sauber:

    VB.NET-Quellcode

    1. Dim txt10 = Double.Parse(TextBox10.Text)
    2. Dim txt13 = Double.Parse(TextBox13.Text)
    3. TextBox14.Text = (0.5 * txt10 / txt13).ToString
    4. TextBox15.Text = (1 * txt10 / txt13).ToString
    5. TextBox16.Text = (1.5 * txt10 / txt13).ToString
    6. TextBox17.Text = (2 * txt10 / txt13).ToString
    7. TextBox18.Text = (2.5 * txt10 / txt13).ToString
    8. TextBox19.Text = (3 * txt10 / txt13).ToString
    9. TextBox20.Text = (3.5 * txt10 / txt13).ToString
    10. TextBox21.Text = (4 * txt10 / txt13).ToString
    11. TextBox22.Text = (4.5 * txt10 / txt13).ToString
    12. TextBox23.Text = (5 * txt10 / txt13).ToString
    13. TextBox24.Text = (5.5 * txt10 / txt13).ToString
    14. TextBox25.Text = (6 * txt10 / txt13).ToString
    Mfg
    Vincent

    Das sieht doch schonmal gut aus. Könntest du vielleicht das Projekt nochmal hochladen, weil du hast ja jetzt die Textboxen umbenannt. Um auch gleich zu Hauptfrage zurückzukommen:
    Wenn ich das richtig verstanden habe willst du einfach nur so einen Graph mit zwei Geraden Linien erstellen?! Das ist ja nicht sooo schwer.
    Mfg
    Vincent

    Okay, hast du schonmal ein eigenes Steuerelement erstellt?
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Imports System.ComponentModel
    2. Imports System.Runtime.Serialization
    3. <DefaultEvent("Paint")> _
    4. Public Class Graph
    5. Inherits Control
    6. Private _xZellen, _yZellen As Integer
    7. Private _rasterColor As Color = Color.Black
    8. ''' <summary>
    9. ''' Die Linien in dem Graph
    10. ''' </summary>
    11. ''' <value>Verändert die Anzahl der Linien</value>
    12. ''' <returns>Gibt die aktuelle Anzahl der Linien zurück</returns>
    13. ''' <remarks></remarks>
    14. Public Property Lines As List(Of Line)
    15. Private abstand As Integer = 25
    16. Public Structure Line
    17. Private _x, _y As Integer
    18. Public Property X As Integer
    19. Get
    20. Return _x
    21. End Get
    22. Private Set(value As Integer)
    23. _x = value
    24. End Set
    25. End Property
    26. Public Property Y As Integer
    27. Get
    28. Return _y
    29. End Get
    30. Private Set(value As Integer)
    31. _y = value
    32. End Set
    33. End Property
    34. Public Property Dicke As Integer
    35. Public Property Color As Color
    36. Public Sub New(X As Integer, Y As Integer, color As Color, Dicke As Integer)
    37. Me.X = X
    38. Me.Y = Y
    39. Me.Color = color
    40. Me.Dicke = Dicke
    41. End Sub
    42. Public Sub New(X As Integer, Y As Integer)
    43. Me.New(X, Y, Color.Black, 3)
    44. End Sub
    45. End Structure
    46. <Browsable(True), Description("Die Anzahl der Zellen auf der X-Achse"), Category("Graph")> _
    47. Public Property XZellen As Integer
    48. Get
    49. Return _xZellen
    50. End Get
    51. Set(value As Integer)
    52. _xZellen = value
    53. End Set
    54. End Property
    55. <Browsable(True), Description("Die Anzahl der Zellen auf der Y-Achse"), Category("Graph")> _
    56. Public Property YZellen As Integer
    57. Get
    58. Return _yZellen
    59. End Get
    60. Set(value As Integer)
    61. _yZellen = value
    62. End Set
    63. End Property
    64. <Browsable(True), Description("Die Farbe des Rasters"), Category("Graph")> _
    65. Public Property Color As Color
    66. Get
    67. Return _rasterColor
    68. End Get
    69. Set(value As Color)
    70. _rasterColor = value
    71. End Set
    72. End Property
    73. Public Sub New()
    74. Me.Width = 500
    75. Me.Height = 500
    76. _xZellen = 20
    77. _yZellen = 20
    78. Lines = New List(Of Line)
    79. End Sub
    80. Protected Overrides Sub OnPaint(e As PaintEventArgs)
    81. MyBase.OnPaint(e)
    82. DrawRaster(e.Graphics)
    83. DrawLines(e.Graphics)
    84. DrawNumbers(e.Graphics)
    85. End Sub
    86. Private Sub DrawNumbers(e As Graphics)
    87. Dim points As New List(Of Point)
    88. Dim counter As Integer = _yZellen
    89. For i = 1 To _yZellen
    90. e.DrawString((counter \ 4).ToString, New Font("Microsoft Sans Serif", 10), Brushes.Black, New Point(2, CInt((((Me.Height - abstand) / _yZellen * i + 7)) - abstand)))
    91. counter -= 1
    92. Next
    93. counter = _xZellen
    94. For i = 1 To _xZellen
    95. e.DrawString((i \ 4).ToString, New Font("Microsoft Sans Serif", 10), Brushes.Black, New Point(CInt((((Me.Width - 25) / _xZellen * i + abstand)) - 20), Me.Height - 20))
    96. counter -= 1
    97. Next
    98. End Sub
    99. Private Sub DrawLines(e As Graphics)
    100. e.SmoothingMode = Drawing2D.SmoothingMode.AntiAlias
    101. For Each l As Line In Lines
    102. Dim p As New Point(0, 0)
    103. e.DrawLine(New Pen(New SolidBrush(l.Color), l.Dicke), New Point(abstand - 1, Me.Height - abstand), New Point(CInt((Me.Width - abstand) / _xZellen * l.X), CInt(Me.Height - ((Me.Height - abstand) / _yZellen * l.Y))))
    104. Next
    105. End Sub
    106. Private Sub DrawRaster(e As Graphics)
    107. For i = 1 To _yZellen
    108. e.DrawLine(New Pen(New SolidBrush(_rasterColor)), New Point(abstand, CInt((Me.Height - abstand) / _yZellen * i)), New Point(Me.Width, CInt(((Me.Height - abstand) / _yZellen * i))))
    109. Next
    110. For i = 1 To _xZellen
    111. e.DrawLine(New Pen(New SolidBrush(_rasterColor)), New Point(CInt(((Me.Width - abstand) / _xZellen * i)), 0), New Point(CInt(((Me.Width - abstand) / _xZellen * i)), Me.Height - abstand))
    112. Next
    113. e.DrawRectangle(New Pen(New SolidBrush(Color.Black)), New Rectangle(abstand - 1, 0, Me.Width - abstand, Me.Height - abstand))
    114. e.DrawRectangle(Pens.Yellow, 0, 0, Me.Width - 1, Me.Height - 1)
    115. End Sub
    116. End Class

    Steck das in ne neue Klasse, Debugge und freue dich, dass du ein neues Steuerelement hast.
    Mfg
    Vincent

    Hallo VincentTB
    Wenn du dir das ganze nochmal anschauen könntest, oder das mit den eigenen Steuerelement näher erklären wie man es ausführt nsw. Werre ich dir sehr dankbar.
    Wie ich am Anfang schon gesagt habe, und du auch schon bestimmt gemerkt hast ich bin halt noch ein Blutiger Anfänger.
    Gruß Adi
    Ok VincentTB

    Ich war dann gerade nicht Online, als du zurückgeschrieben hattest...
    Ist auch egal. Also, du machst folgendes:
    Du gehst in Visual Basic auf Projekt > Klasse hinzufügen... Dann öffnet sich ein Fenster, dort gibts du als Namen "Graph" ein. Danach öffnest du diese Klasse, löschst alles und kopierst den gesamten Code von mir in die Klasse. Dann debuggst du einmal und wenn du das Programm geschlossen hast ist in deiner Toolbox ein neues Control, "Graph". Den ziehst du auf die Form, debuggst und hast deinen Graph. Wenn du soweit bist, schreib zurück, dann helfe ich dir weiter. (schreib bitte in dem Thread zurück, denn dann können auch Leute nach dir noch davon profitieren

    Ich habe es so gemacht das Ergebnis :

    Nochmals danke in voraus

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Adi“ ()

    Und das ist das Problem. Ich kann mir beim besten willen nicht vorstellen, was an der Struktur/Klasse falsch sein soll. Vielleicht kann ja da mal jemand anders helfen :) Bei mir gings gerade die ganze Zeit, und auf einmal kam dieser komische Fehler...

    Obwohl,
    @faxe1008
    hatte doch mal ne Black and White Controlsammlung, die hatte doch nen Graphen...
    Mfg
    Vincent

    @VincentTB:
    Jup die hatte ich mal. War aber nicht sonderlich OOP gerecht. Hab neulich nochmal daran rumgebastelt ich lad dir die .dll mal hier hoch.
    Dateien
    • Graph.dll

      (18,43 kB, 133 mal heruntergeladen, zuletzt: )

    8-) faxe1008 8-)

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „faxe1008“ ()

    Mal ne blöde Frage wieso selber machen, wenn das Steuerelement schon zur Verfügung steht? Ich realisiere alle meine Anwendungen mit dem MS Chartcontrol welches bei VB2008 nachinstalliert werden kann u. bei 2010 u. 2012 schon von Haus aus dabei ist.
    Gruß von der KSE

    ks-entwicklung.de