Formdesigner

  • VB.NET

Es gibt 13 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    Formdesigner

    Hi Com,

    Ich möchte mir ein Programm erstellen, in dem ich eine Form entwerfen kann. Dazu verwende ich dieses Tutorial:
    *klick zum Tutorial*

    Ich habe zwei Fragen dazu:
    1. Wie kann ich wenn ich einen Button zur Laufzeit hinzufüge diesen in der Combobox über dem Property-Grid anzeigen lassen, so dass die Eigenschaften im Property-Grid angezeigt werden, wenn sie selektiert werden?

    2. Die designte Form anzeigen lassen?

    Vielen Dank für eure Hilfe

    8-) faxe1008 8-)
    Mach alles, was Du machen möchtest, parallel in einem anderen Projekt im Designer und sieh Dir an was für einen Code der Designer in die Datei FormX.Designer.vb in die Prozedur InitializeComponents() schreibt.
    Das musst Du einzeln nachempfinden.
    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!
    Wie wird denn ein PropertyGrid im Designer befüllt?
    Empfinde es nach.
    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!
    Naja mit PropertyGrid1.SelectedObject = ... würde ich sagen

    ich hätte die Idee eine Liste von Controls zu erzeugen Dim contro As New List(Of Control)
    den Button hinzuzufügen:

    VB.NET-Quellcode

    1. Dim butt As New Button
    2. contro.Add(butt)
    3. butt = surface.CreateControl(GetType(Button), New Size(100, 20), New Point(10, 10))


    und dann den Namen der Combobox hinzuzufügen ComboBox1.Items.Add(butt.Name.ToString)

    wie kann ich jetzt das passende Control aus der contro-list im Property grid anzeigen lassen?

    8-) faxe1008 8-)
    Indem Du den Erfinder des PropertyGrids befragst: MSDN.

    VB.NET-Quellcode

    1. Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
    2. PropertyGrid1.SelectedObject = Button1
    3. End Sub
    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!

    faxe1008 schrieb:

    VB.NET-Quellcode

    1. Dim butt As New Button
    2. contro.Add(butt)
    3. butt = surface.CreateControl(GetType(Button), New Size(100, 20), New Point(10, 10))
    Vielleicht steckt hier der Fehler, was genau macht surface.CreateControl(...) :?:
    Du erzeugst nämlich eine weitere Instanz.
    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!

    RodFromGermany schrieb:

    was genau macht surface.CreateControl(...) :?:
    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. Imports pF.DesignSurfaceManagerExt
    2. Imports DesignSurfaceExt
    3. Public Class Form1
    4. Dim surface As IDesignSurfaceExt = New DesignSurfaceExt.DesignSurfaceExt()
    5. Dim frm As Form
    6. Dim compo As New List(Of Control)
    7. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    8. frm = surface.CreateRootComponent(GetType(Form), New Size(400, 400))
    9. frm.Name = "Form1"
    10. frm.Text = "Versuch"
    11. compo.Add(frm)
    12. ComboBox1.Items.Add(frm.Name.ToString)
    13. surface.GetView.BackColor = Color.White
    14. surface.GetView().Parent = Panel1
    15. End Sub

    (auszug aus dem tutorial!!!!)

    es fügt dem surface welches die dll im Panel anzeigt ein Control hinzu...

    8-) faxe1008 8-)

    faxe1008 schrieb:

    (auszug aus dem tutorial!!!!)
    Ich schlage vor, Du versuchst dieses Tutorial zu verstehen (ich muss es nämlich nicht verstehen) und stellst dann konkrete Fragen zu konkreten Fehlern oder Effekten.
    Falls Du es nicht verstehen solltest, such Dir ein anderes Tutorial und / oder eine neue Programmieraufgabe.
    --------
    In Deinem Code vermiss ich die Buchstabenfolge Button.
    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!
    es sollte ja mit jedem Control funktionieren. Ich verwende provisorisch eine Listbox zum auswählen der Controls:

    VB.NET-Quellcode

    1. Private Sub ListBox1_DoubleClick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ListBox1.DoubleClick
    2. If ListBox1.SelectedIndex = 0 Then
    3. Dim butt As New Button
    4. butt.Text = butt.Name
    5. contro.Add(butt)
    6. butt = surface.CreateControl(GetType(Button), New Size(100, 20), New Point(10, 10))
    7. ComboBox1.Items.Add(butt.Name)
    8. End If
    9. End Sub

    8-) faxe1008 8-)
    Mach es doch genau so wie im Tutorial:

    VB.NET-Quellcode

    1. Dim butt As Button
    2. Private Sub ListBox1_DoubleClick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ListBox1.DoubleClick
    3. If ListBox1.SelectedIndex = 0 Then
    4. butt = surface.CreateControl(GetType(Button), New Size(100, 20), New Point(10, 10))
    5. butt.Text = butt.Name
    6. contro.Add(butt)
    7. ComboBox1.Items.Add(butt.Name)
    8. End If
    9. End Sub
    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!