Fehlendes Argument für GetColumn?

  • VB.NET

Es gibt 15 Antworten in diesem Thema. Der letzte Beitrag () ist von bondi.

    Fehlendes Argument für GetColumn?

    Moin Forum,

    mein Formular enthält einen SplitContainer, der u.a. ein TableLayoutPanel mit 17 Spalten und Zeilen enthält. Dieses Raster enthält
    Pictureboxen, die per Code generiert werden. Die äusseren 4 Spalten und Zeilen sind unsichtbar. Sie werden benötigt, um (gültige)
    Züge und Lösungen zu ermitteln. Die sichtbaren 9 Spalten und Zeilen enthalten Spielsteine, deren Wert ich dafür in "PictureBox.Tag"
    speichere.

    Visual Basic-Quellcode

    1. Public Class frmSpielfeld
    2. ' arrays der class dimensionieren
    3. Dim intSpielfeld(17, 17) As Integer
    4. Dim intVersatz_Spalte(3) As Integer
    5. Dim intVersatz_Zeile(3) As Integer
    6. ' konstanten der class dimensionieren
    7. Const conFeld_Unsichtbar As Integer = 99
    8. ' objekte der class dimensionieren
    9. Dim imgSpielstein As New Dictionary(Of Integer, Image)
    10. Dim pbxSpielstein(17, 17) As PictureBox
    11. Dim rndZufallszahl As New Random
    12. ...
    13. Private Sub Spielfeld_Anzeigen()
    14. ' variablen der sub dimensionieren
    15. Dim intSpalte As Integer
    16. Dim intZeile As Integer
    17. ' alle zellen des spielfeldes durchlaufen
    18. For intSpalte = 1 To 17
    19. For intZeile = 1 To 17
    20. ' neuen spielstein erzeugen
    21. pbxSpielstein(intSpalte, intZeile) = New PictureBox
    22. With pbxSpielstein(intSpalte, intZeile)
    23. ' pruefen, ob sich die aktuelle zelle in den beiden aeusseren spalten oder zeilen des spielfeldes befindet
    24. If intSpielfeld(intSpalte, intZeile) = conFeld_Unsichtbar Then
    25. ' ja, daher einen unsichtbaren spielstein erzeugen
    26. .AllowDrop = False
    27. .Height = 0
    28. .Tag = conFeld_Unsichtbar
    29. .Visible = False
    30. .Width = 0
    31. Else
    32. ' nein, daher einen sichtbaren spielstein erzeugen
    33. .AllowDrop = True
    34. .Height = 72
    35. .Image = imgSpielstein(intSpielfeld(intSpalte, intZeile))
    36. .SizeMode = PictureBoxSizeMode.CenterImage
    37. .Tag = intSpielfeld(intSpalte, intZeile)
    38. .Visible = True
    39. .Width = 64
    40. ' addhandler hinzufuegen
    41. AddHandler .DragDrop, AddressOf Spielstein_DragDrop
    42. AddHandler .DragEnter, AddressOf Spielstein_DragEnter
    43. AddHandler .MouseDown, AddressOf Spielstein_MouseDown
    44. AddHandler .MouseMove, AddressOf Spielstein_MouseMove
    45. End If
    46. End With
    47. ' spielstein hinzufuegen und anzeigen
    48. tblSpielfeld.Controls.Add(pbxSpielstein(intSpalte, intZeile), intZeile - 1, intSpalte - 1)
    49. Next
    50. Next
    51. End Sub
    52. ...
    53. Private Sub Spielstein_MouseDown(ByVal sender As Object, ByVal e As MouseEventArgs)
    54. ' pruefen, ob die linke maustaste gedrueckt wurde
    55. If e.Button <> Windows.Forms.MouseButtons.Left Then
    56. ' nein, daher sub beenden
    57. Exit Sub
    58. End If
    59. Me.txtTest.Text = Me.tblSpielfeld.Controls.GetColumn() ' ?????
    60. End Sub
    61. End Class


    Wie kann ich (ab Zeile 57) die aktuelle Spalte und Zeile des TableLayoutPanel ermitteln bzw.
    welches Argument fehlt in Zeile 63?

    Die Sub "Spielfeld_Anzeigen" funktioniert. Vielleicht mag ja trotzdem jemand einen Blick darauf werfen...

    *knicksmach*

    Gruß Peter
    Hmm? ".Control" ist wohl überflüssig. Nach "Me.txtTest.Text = Me.tblSpielfeld.GetColumn()" sehe ich folgendes: Für den Parameter "control" ... wurde kein Argument angegeben

    Ich ging und drückte, aber trotzdem ist mir unklar, welches Argument das Richtige ist.

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „bondi“ () aus folgendem Grund: Ergänzung und Korrektur

    Wie ist denn tblSpielfeld überhaupt deklariert?
    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!

    VB.NET-Quellcode

    1. Dim tblSpielfeld As New IRGENDWAS
    Was ist IRGENDWAS :?:
    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!
    Hmm? tblSpielfeld existiert doch schon als TableLayoutContainer im SplitContainer bzw. im Formular?!

    In dieses TableLayoutPanel füge ich per Code die Pictureboxen pbxSpielstein bei. Und das funktioniert ja auch...

    Wozu brauche ich dann noch dieses Dim tblSpielfeld As New IRGENDWAS ???

    *aufdemschlauchsteh*
    Ich benötige das, um Dir besser helfen zu können.
    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!
    Danke! Trotzdem ist mir leider unklar, was Du brauchst bzw. meinst.

    Ein DIM tblSpielfeld AS NEW führt zu "tblSpielfeld" ist bereits als "Friend WithEvents tblSpielfeld As System.Windows.Forms.TableLayoutPanel" in class deklariert

    bondi schrieb:

    VB.NET-Quellcode

    1. As System.Windows.Forms.TableLayoutPanel
    Das wollte ich wissen.
    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!

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „RodFromGermany“ ()

    VB.NET-Quellcode

    1. Me.txtTest.Text = Me.tblSpielfeld.GetControlFromPosition(1, 2).Text
    Meinst Du so etwas?
    Du musst natürlich die richtigen Indizes einsetzen.
    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!
    Rod, ich möchte die Indizes ermitteln ... nicht angeben.

    Das TableLayoutPanel enthält 9 (sichtbare) Spalten und Zeilen, in denen Pictureboxen enthalten sind.
    Per DragAndDrop sollen zwei Pictureboxen ihre Positionen tauschen.

    Ich möchte ermitteln, in welcher Zelle (Spalte und Zeile) sich der Mauszeiger bei Mouse_Down befindet.

    Danke für Deine Geduld!
    Dann solltest Du es anders rum machen.
    Beim Einsetzen der PictureBoxen solltest Du denen die Position mitgeben, und wenn Du drauf klickst, weiß diese PictureBox, wo sie steht. Diese Info musst Du nach dem Ziehen aktualisieren.
    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!
    Hmm, das ist ja nun wohl doch alles komplizierter, als ich es mir vorstellte.

    Dim pbxSpielstein(17, 17) As PictureBox ... Zeile 10 im obigen Code
    pbxSpielstein(intSpalte, intZeile) = New PictureBox ... Zeile 23 im obigen Code und
    tblSpielfeld.Controls.Add(pbxSpielstein(intSpalte, intZeile), intZeile - 1, intSpalte - 1) ... Zeile 50 im obigen Code

    verweisen doch eigentlich schon auf eine eindeutige Position ... dachte ich!

    Danke! Ich versuche dann mal über "TableLayoutPanelCellPosition" mein Glück...

    Grüße