Spielstandserfassung

  • VB.NET

Es gibt 20 Antworten in diesem Thema. Der letzte Beitrag () ist von Marc.

    Spielstandserfassung

    Heyho Leute,

    ich habe ein Problemchen. Und zwar versuche ich mich grade an einem Tool um auf einer Leinwand in unserer Dartkneipe die Spielstände anzuzeigen. Dazu möchte ich die Form1 auf die Leinwand schieben und über eine zweite Form (frmEingabe) die Spielstände eintippen und bei klick auf "Aktualisieren" soll er diese Zahl in der Form1 in einen Lable (lblHeim und lblGast) schreiben.

    Jemand eine Umsetzungsidee für mich?
    Ja genau darim liegt mein Problem. Kriege das nicht wirklich hin. Ich muss ja aus einer anderen Form die Eingabe in die erste Form bekommen...

    Habe da grade total den Blackout im gesamten...

    lblHeimWert und lblGastWert in der Form1
    txtHeim und txtGast als TextBoxen in der frmEingabe + 1x Button btnRefresh
    Also mein Code sieht im Moment so aus, aber so klappt es nicht ...

    VB.NET-Quellcode

    1. Private Sub btnRefresh_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnRefresh.Click
    2. Dim SpielstandHeimText As String
    3. Dim SpielstandGastText As String
    4. Dim SpielstandHeim As Integer
    5. Dim SpielstandGast As Integer
    6. SpielstandHeimText = Form1.lblHeim.Text
    7. SpielstandGastText = Form1.lblGast.Text
    8. SpielstandHeim = txtHeim.Text
    9. SpielstandGast = txtGast.Text
    10. If txtHeim.Text >= 0 Then
    11. SpielstandHeimText.ToString()
    12. End If
    13. End Sub
    Ich würde das Eingabefenster als Hauptfenster nutzen. Dann öffnet das Eingabefenster das Anzeigefenster und hat so eine private Variable, mit der es lesend & schreibend auf die Anzeige zugreifen kann.

    VB.NET-Quellcode

    1. Class EingabeForm
    2. Private anzeige As AnzeigeForm
    3. ' Irgendwo:
    4. anzeige.GastValue = bla...
    5. ' AnzeigeForm-Klasse muss entsprechende Properties bereitstellen
    6. End Class


    Viele Grüße, Phil.
    Jetzt verstehe ich gar nichts mehr xD

    Habe es jetzt neu gemacht, so wie du gesagt hast. Eingabe Form ist jetzt Form1 und die andere frmAnzeige

    In der Form1 habe ich nach wie vor die Textboxen txtHeim und txtGast sowie den Button btnRefresh
    In der frmAnzeige nun Lables lblHeimWert und lblGastWert die beide auf 0 stehen und riesen groß sind.

    Diese "0" soll jedes mal wenn in der Form1 eine Zahhl geschrieben wird angezeigt werden wenn man den btnRefresh klickt. Falls sowas auch ohne Button geht, also direkt bei eingabe angezteigt wird, bin ich dafür auch zu haben =)

    Kann das noch mal jemand für ganz blöde erläutern, wie ich diese 10 Zeilen Code zustande bekomme? Danke!


    EDIT:

    Ich habe es jetzt ganz primitiv gelöst:

    VB.NET-Quellcode

    1. Private Sub btnRefresh_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnRefresh.Click
    2. If txtHeim.Text > 0 Then
    3. frmAnzeige.lblHeimWert.Text = txtHeim.Text
    4. End If
    5. If txtGast.Text > 0 Then
    6. frmAnzeige.lblGastWert.Text = txtGast.Text
    7. End If
    8. End Sub

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

    Marc schrieb:

    Ich habe es jetzt ganz primitiv gelöst
    wie du siehst, ists noch viel einfacher als picoflop angenommen.

    ich mach nochn Vorschlag:

    VB.NET-Quellcode

    1. Private Sub btnRefresh_Click(ByVal sender As Object, ByVal e As EventArgs) Handles btnRefresh.Click
    2. frmAnzeige.lblHeimWert.Text = txtHeim.Text
    3. frmAnzeige.lblGastWert.Text = txtGast.Text
    4. End Sub
    Huhu, ich muss dieses Thema noch mal aufleben lassen. Ich möchte es etwas erweitern / ändern. Ich habe jetzt die MDI Funktion eingebaut und schon klappt es nicht mehr. Eigendlich gehört das Problem hier rein, ich habe leider ein neues Thema dafür geöffnet. Das steht hier: [VB.NET] MDI + Daten aus anderer Form laden?

    Zudem habe ich noch ein Problem. Ich möchte die Anzeige maximiert öffnen und dann sollen auch die Lables zentriert angezeigt werden. Das Problem ist, dass die Anzeige auf einer Leinwand (11 m² = 4,20 m x 2,50 m) und 2 Monitoren (größe z. Zt. unbekannt) angezeigt werden soll und es soll natürlich auf allen 3 Geräten gut aussehen. Kann man da was einstellen um die Größen zu ermitteln oder alles perfekt angezeigt wird?

    Ich hänge das Projekt einfach mal hier an und hoffe das mir geholfen wird. Wie gesagt, es ist ganz primitiv aufgebaut zur Zeit, keine Speichern Funktion. Alle Informationen werden aus dem geöffneten Fenstern in die andere Form geladen und so... Vielleicht hat da auch jemand eine Idee das etwas schöner zu gestalten. Dafür bin ich allerdings noch nicht fit genug.

    Besten Dank im Voraus und ich hoffe auf Hilfe, da ich wie gesagt total unerfahren bin aber für meinen Dartverein hier ein wenig lerne und spiele.
    Dateien
    • DartCounter2.rar

      (186,66 kB, 130 mal heruntergeladen, zuletzt: )
    So, das Thema mit dem Zeilenweise einlesen aus einer Textdatei habe ich nun geschafft.

    Das habe ich so gelöst:

    VB.NET-Quellcode

    1. Dim Lines() As String = IO.File.ReadAllLines("Spieler.txt")
    2. lblHeim.Text = Lines(0)
    3. lblHeimSpieler1.Text = Lines(1)
    4. lblHeimSpieler2.Text = Lines(2)
    5. lblHeimSpieler3.Text = Lines(3)
    6. und so weiter...


    Mein nächstes Problem ist noch das einrücken, wenn ich das Fenster maximiere. Dann sollen die Lables sich mittig zentrieren. Wie mache ich das?
    Ein Freund sagte mir man kann die Auflösung / Größe des Gerätes ermitteln lassen und das dann anzeigen lassen. Kann mir das jemand erklären? Er hat dazu keine Zeit gehabt.

    Sorry wegen dem Doppelpost, aber es gibt hier keine Funktion "Beitrag als neu markieren"... Somit wird auch niemandem angezeigt, das sich hier was verändert hat...
    Das wusste ich nicht, danke!

    Allerdings bekomme ich dann einen Fehler: Der Verweis auf einen nicht freigegebenen Member erfordert einen Objektverweis.

    Das schreibe ich dann so:

    VB.NET-Quellcode

    1. Private Sub TableLayoutPanel1_Paint(ByVal sender As System.Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles TableLayoutPanel1.Paint
    2. Label.Anchor = None
    3. End Sub
    Wenn du den Spielstand von irgendwas zuverlässig speichern und wieder einlesen willst, erstell eine Klasse mit allen nötigen Properties.
    Beim Speichern serialisierst du diese und speicherst sie als XML ab, beim Einlesen deserialisierst du sie wieder und liest die Properties aus. ;)
    Okay, das hat nicht funktioniert. Bei mir auf dem PC sieht es gut aus, auf der Leinwand wird aber nur die Hälfte angezeigt... Hat jemand ne andere Idee, wie ich die Anzeige meiner labels zentrieren kann und das es auch auf anderen Auflösungen ordentlich angezeigt wird?
    So sieht jetzt der komplette Code meiner Anzeige Form aus, die auf 2 TV Geräte und 1 große Leinwand gezaubert wird:

    VB.NET-Quellcode

    1. Imports System.IO
    2. Public Class frmSpielstand
    3. Private Sub frmSpielstand_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    4. If File.Exists("Spieler.txt") Then
    5. Dim Lines() As String = IO.File.ReadAllLines("Spieler.txt")
    6. lblHeim.Text = Lines(0)
    7. lblHeimSpieler1.Text = Lines(1)
    8. lblHeimSpieler2.Text = Lines(2)
    9. lblHeimSpieler3.Text = Lines(3)
    10. lblHeimSpieler4.Text = Lines(4)
    11. lblHeimSpieler5.Text = Lines(5)
    12. lblHeimSpieler6.Text = Lines(6)
    13. lblGast.Text = Lines(7)
    14. lblGastSpieler1.Text = Lines(8)
    15. lblGastSpieler2.Text = Lines(9)
    16. lblGastSpieler3.Text = Lines(10)
    17. lblGastSpieler4.Text = Lines(11)
    18. lblGastSpieler5.Text = Lines(12)
    19. lblGastSpieler6.Text = Lines(13)
    20. End If
    21. If frmSpielerdaten.txtHeimSpieler5.Text = "" Then
    22. lblHeimSpieler5.Visible = False
    23. ElseIf frmSpielerdaten.txtHeimSpieler6.Text = "" Then
    24. lblHeimSpieler6.Visible = False
    25. End If
    26. If frmSpielerdaten.txtGastSpieler5.Text = "" Then
    27. lblGastSpieler5.Visible = False
    28. ElseIf frmSpielerdaten.txtGastSpieler6.Text = "" Then
    29. lblGastSpieler6.Visible = False
    30. End If
    31. End Sub
    32. Private Sub TableLayoutPanel1_Paint(ByVal sender As System.Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles TableLayoutPanel1.Paint
    33. lblHeim.Anchor = AnchorStyles.Left
    34. lblHeimWert.Anchor = AnchorStyles.Left
    35. lblHeimSpieler1.Anchor = AnchorStyles.Left
    36. lblHeimSpieler2.Anchor = AnchorStyles.Left
    37. lblHeimSpieler3.Anchor = AnchorStyles.Left
    38. lblHeimSpieler4.Anchor = AnchorStyles.Left
    39. lblHeimSpieler5.Anchor = AnchorStyles.Left
    40. lblHeimSpieler6.Anchor = AnchorStyles.Left
    41. lblGast.Anchor = AnchorStyles.Left
    42. lblGastWert.Anchor = AnchorStyles.Left
    43. lblGastSpieler1.Anchor = AnchorStyles.Left
    44. lblGastSpieler2.Anchor = AnchorStyles.Left
    45. lblGastSpieler3.Anchor = AnchorStyles.Left
    46. lblGastSpieler4.Anchor = AnchorStyles.Left
    47. lblGastSpieler5.Anchor = AnchorStyles.Left
    48. lblGastSpieler6.Anchor = AnchorStyles.Left
    49. Label1.Anchor = AnchorStyles.None
    50. Label2.Anchor = AnchorStyles.None
    51. End Sub
    52. End Class


    Leider ist da nicht viel anders als ohne das TableLayoutPanel...
    Wenn ich die Form maximiere, soll sich alles ordentlich anordnen. Siehe Screen, so sieht es jetzt aus.

    Was kann ich tun?
    Bilder
    • image2.jpg

      148,55 kB, 1.926×1.086, 108 mal angesehen