Per VB-Code WPF aufbauen

  • Hi,


    möchte gerne wissen ob es möglich per VB-Code (nicht im WPF selber) ein Datagrid zu erstellen. Die einzelnen Zellen (z.B. Row 0 Column 0) sollen Sitzplätze sein. Wenn ich dann auf eine Zelle klicke, dann soll diese ihre Farbe ändern (z.B. in rot, als "belegt"). Wenn ich wieder drauf klicke, dann soll der Platz blau sein (als "frei"). Wenn ich auf speichern klicke, dann sollen sich die rot markierten zellen zu grün ändern (für "reserviert").


    Mein eigentliches Problem ist nun das klicken auf die Zellen. Da es ja eigtl. ein Textfeld ist hab ich mir gedacht, dass ich irgendwie (anstatt Textfelder) Buttons in die einzelnen Zellen einfüge, jedoch weiß ich nicht wie das geht.


    Falls der Aufbau auch ohne Datagrid bzw. Grid allgemein gehen würde, dann sagt pls wie das geht^^


    Es sollte sich halt von selbst irgendwie so aufbauen:



    Die Anzahl an Reihen und Sitzplätze in der Reihe wurden in einer Datenbank definiert. Der Aufbau sollte somit in einer for each schleife (oder for i <= reihe bzw. for j <= sitzplatz) ablaufen


    Code
    1. For each el in Reihe
    2. For each el in Sitzplatz
    3. Erstelle Button(reihe)(sitzplatz)
    4. Next
    5. Next
  • Immer diese VB-Leute ... :D


    Dein Ansatz ist schonmal nicht schlecht. Das Datagrid hat zwar ein Event das sich CellClick nennt, aber das reagiert irgentwie auf alles und ich bin mir nicht sicher ob man beim Datagrid die Zellen farbig machen kann ...


    Du kannst zur Laufzeit Controls auf die Form hinzufügen.
    Im Namen speicherst du was, was deinen Button eindeutig identifiziert, damit du ihn später auch wieder erkennst.



    Im EventHandler selbst gibt es das sender-Objekt. Dieses ist immer das Objekt bzw. Control, welches dieses Event ausgelöst hat. In deinem Fall also ein Button.
    Diesen kann man vom Typ Object in Typ Button "casten" und so auf die Attribute wie z.B. den Namen zugreifen.
    (sorry ich kenne die genaue Syntax in VB nicht - könnte falsch sein ^^)



    Bleibt noch die Frage der Positionierung. Wenn die Anordnung deiner Buttons immer Rechteckig ist, dann kannst du dafür das FlowLayoutPanel verwenden. Da werden die Steuerelemente automatisch positioniert (immer der Reihe nach). Oder du berechnest die Position manuell.



    Gruß
    florian0

  • Thx


    verzweifle aber gerade an dem Me.Controls.Add(bt) bzw. MainWindow.Controls.Add(bt)


    Wenn ich Me. oder MainWindow. eingebe gibt es kein Controls... google gerade auch die ganze zeit und in allen beispielen wird me.controls angegben, was jedoch bei mir nicht funktioniert bzw. es nicht gibt <.<


    "control" ist kein Member von "WpfApplication1.MainWindow".


    Edit: Wtf. Bei Form1.vb gibt es Me.Controls, bei MainWindow.xaml.vb gibt es kein Me.Controls... suckt <.<


    Naja, jedenfalls klappt es, dass ich ein/mehrere Button(s) an eine best. Position erstellen kann^^

  • Willst du unbedingt das WPF verwenden?
    Bei WPF ist das ein wenig anders.


    In der xaml-Datei ist ein Grid. Dem gibst du einen Namen z.B. so:

    Code
    1. <Grid Name="MainGrid">
    2. </Grid>


    Dann kannst du über:

    Code
    1. MainGrid.Children.Add(Buttonding)


    Controls hinzufügen ...


    (Ich mag WPF nicht xD)


    Gruß
    florian0

  • ~Read Edit~


    Ja, lerne jetzt seit einem 3/4 Jahr VB und hab zu 90% mit XAML gearbeitet^^


    Hab bis jetzt Form1.vb noch nie verwendet. Bin jetzt jedoch auf Form1.vb umgestiegen, da ich dort mein problem einfacher lösen kann^^


    Jedenfalls klappt es, dass ich die Buttons in das Formular einfügen kann (Positioniert durch bt.Location = New Point(i,j))


    Werde demnächst dann die Werte von i und j (i = Reihe, j = Platz) von der DB auslesen und dann den Raum nach den gelesenen Werten aufbauen. Das mit den Farben werde ich dann nach dem Aufbau des Raums machen.


    Jedenfalls danke für deine Hilfe :thx: ^^


    Falls es wer braucht (derzeitger Code - Anmerkung: Reihe und Platz werden noch nicht richtig ausgegeben. Ausgegeben wird derz. die letzte Reihe bzw. der letzte Platz (siehe for each Schleife letzte Zahl)):



    Edit:


    Ich hab jetzt ein WPF und die obige WF. Wie schaff ich es, dass ich die WF in mein WPF einbinde? Wenn ich in meinem WPF eine WF erstelle, dann erkennt er wieder die .Controls nicht bzw. oButton.Location usw. sondern nur die Sachen, die im zusammenhang mit XAML/WPF stehen.


    Allgemein gesagt:


    Mein Anwendungstyp: WPF-Anwendung
    Ich möchte eine Windows Form in die WPF-Anwendung einbinden + die Windows Form soll .Controls usw. erkennen!


    Edit2:


    Hab jetzt herausgefunden, dass ich "Imports System.Windows.Forms" in die WF einfügen muss... Brauche nur noch den Import für Point und Size.


    Edit3: Nevermind, klappt es jetzt alles :)


    Musste beim WF oben folgendes einfügen:


    Imports System
    Imports System.Drawing
    Imports System.Windows.Forms
    Imports System.IO


    Rufe das Fenster dann in meiner XAML so auf:


    Dim ResFenster As Reservierung
    ResFenster.Show()

  • Hab jetzt herausgefunden, dass ich "Imports System.Windows.Forms" in die WF einfügen muss... Brauche nur noch den Import für Point und Size.


    System.Drawing


    Es gibt in Visual Studio den Objectbrowser. Da kann man Klassen und deren "Import" finden.



    Edit: To slow .. :D