Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

VB.net VisualStudio Designer Parameter vorbelegen

Empfohlene Antworten

Veröffentlicht

Hi leuts,

Problem wie folgt:

Ich hab eine GUI-Componete die eigentlich erst zur laufzeit korrekt erstellt werden kann,

liegt daran das sie für einige Dimensionierungen des Tabellayouts was darin abläuft einen mit DB-Daten gefüttertes Dictionary braucht.

Nun die Frage: kann ich dem Designer irgendwie fixe Standardwerte geben die er für das Anzeigen auswerten kann?

Es handelt sich leider um ein größeres Fenster, welches neben meiner Componete noch andere enthält und evt auch noch erweitert werden soll, daher is es unschön wenn der Designer nichtmehr tut^^

Die Fehlermeldung wegklicken führt ja zu leider dazu das die Componete einfach vom Layout entfernt wird.

Hier mal der Code der Componete, den ich von hand schreiben muss, den Designercode erspar ich euch mal^^

Public Class Projekt_PPQA_Management

    'true if process is NA else false saves "old" states

    Public states As New Dictionary(Of Integer, Boolean)


    Public boxes As New Dictionary(Of Integer, System.Windows.Forms.CheckBox)

    Sub New([B][U]proj As Projekt[/U][/B])

        ' This call is required by the designer.

        InitializeComponent()

        MainPane.CellBorderStyle = TableLayoutPanelCellBorderStyle.Inset

        ' Add any initialization after the InitializeComponent() call.

        MainPane.RowCount = Process_Dict.Keys.Count + 2


        While (MainPane.RowStyles.Count <= MainPane.RowCount - 1)

            MainPane.RowStyles.Add(New RowStyle(SizeType.AutoSize))

        End While

        MainPane.RowStyles.Add(New RowStyle(SizeType.Percent, 50.0!))

        MainPane.ColumnCount = 2

        MainPane.ColumnStyles(0).SizeType = SizeType.AutoSize

        MainPane.RowStyles(0).SizeType = SizeType.AutoSize

        MainPane.RowStyles(1).SizeType = SizeType.AutoSize

        Dim ProcessHeaderLabel As New System.Windows.Forms.Label

        ProcessHeaderLabel.Text = "Processnames"

        ProcessHeaderLabel.Font = New System.Drawing.Font(ProcessHeaderLabel.Font, FontStyle.Bold)

        ProcessHeaderLabel.Dock = DockStyle.Fill

        ProcessHeaderLabel.TextAlign = ContentAlignment.MiddleCenter

        Dim NALabel As New System.Windows.Forms.Label

        NALabel.Text = "Enabled for this Project"

        NALabel.Font = New System.Drawing.Font(ProcessHeaderLabel.Font, FontStyle.Bold)

        NALabel.AutoSize = True

        NALabel.Dock = DockStyle.Fill

        NALabel.TextAlign = ContentAlignment.MiddleLeft

        'the two headers

        MainPane.Controls.Add(ProcessHeaderLabel)

        MainPane.Controls.Add(NALabel)


        For Each p As Integer In Process_Dict.Keys

            Dim namelabel As New System.Windows.Forms.Label

            namelabel.AutoSize = True

            namelabel.Text = Process_Dict(p)

            namelabel.Dock = DockStyle.Fill

            namelabel.TextAlign = ContentAlignment.MiddleLeft


            Dim NACheckbox As New System.Windows.Forms.CheckBox

            boxes(p) = NACheckbox

            If (proj.NA_Processes.Contains(p)) Then

                NACheckbox.Checked = True

                states(p) = True

            Else

                NACheckbox.Checked = False

                states(p) = False

            End If

            NACheckbox.CheckAlign = ContentAlignment.MiddleCenter

            MainPane.Controls.Add(namelabel)

            MainPane.Controls.Add(NACheckbox)

        Next

    End Sub

End Class

Gruß Lucas

Es handelt sich um eine selbst erstellte Komponente?

Du kannst Variablen mit Standardwerten initialisieren. Wenn Du dann die korrekten Daten setzt, werden diese dann überschrieben.

Musst Dich dann halt daran kümmern, dass das Control / die Komponente dann neu gezeichnet wird.

  • Autor
Es handelt sich um eine selbst erstellte Komponente?

Du kannst Variablen mit Standardwerten initialisieren. Wenn Du dann die korrekten Daten setzt, werden diese dann überschrieben.

Musst Dich dann halt daran kümmern, dass das Control / die Komponente dann neu gezeichnet wird.

Jau is eine selbst erstellte.

Verpass ich da grade irgendwas? wenn sich nur das Tablelayout später verändert, muss ich dann nicht nur für dieses layout ein Refresh aufrufen? oder muss ich das für das volle Window machen? weil wenn ich meinen Code nun entsprechend abändere:

Public Class Projekt_PPQA_Management

    'true if process is NA else false saves "old" states

    Public states As New Dictionary(Of Integer, Boolean)


    Public boxes As New Dictionary(Of Integer, System.Windows.Forms.CheckBox)

    Dim realini As Boolean = False

    'this is only a Methode for the designer, IT DOES NOT DISPLAY THE CORRECT FULL LAYOUT!

    Sub New()

        InitializeComponent()

        MainPane.RowCount = 2

        MainPane.CellBorderStyle = TableLayoutPanelCellBorderStyle.Inset

        While (MainPane.RowStyles.Count <= MainPane.RowCount - 1)

            MainPane.RowStyles.Add(New RowStyle(SizeType.AutoSize))

        End While

        MainPane.RowStyles.Add(New RowStyle(SizeType.Percent, 50.0!))

        MainPane.ColumnCount = 2

        MainPane.ColumnStyles(0).SizeType = SizeType.AutoSize

        MainPane.RowStyles(0).SizeType = SizeType.AutoSize

        MainPane.RowStyles(1).SizeType = SizeType.AutoSize

        Dim ProcessHeaderLabel As New System.Windows.Forms.Label

        ProcessHeaderLabel.Text = "Processnames"

        ProcessHeaderLabel.Font = New System.Drawing.Font(ProcessHeaderLabel.Font, FontStyle.Bold)

        ProcessHeaderLabel.Dock = DockStyle.Fill

        ProcessHeaderLabel.TextAlign = ContentAlignment.MiddleCenter

        Dim NALabel As New System.Windows.Forms.Label

        NALabel.Text = "Enabled for this Project"

        NALabel.Font = New System.Drawing.Font(ProcessHeaderLabel.Font, FontStyle.Bold)

        NALabel.AutoSize = True

        NALabel.Dock = DockStyle.Fill

        NALabel.TextAlign = ContentAlignment.MiddleLeft

        'the two headers

        MainPane.Controls.Add(ProcessHeaderLabel)

        MainPane.Controls.Add(NALabel)

    End Sub


    'This special init Methode is needed, so the Designerview (bevor runtime) won't crash

    Public Sub myGUIinit(proj As Projekt)

        If Not realini Then

            ' This call is required by the designer.

            InitializeComponent()


            ' Add any initialization after the InitializeComponent() call.

            realini = True

            MainPane.RowCount = Process_Dict.Keys.Count + 2

            MainPane.CellBorderStyle = TableLayoutPanelCellBorderStyle.Inset

            While (MainPane.RowStyles.Count <= MainPane.RowCount - 1)

                MainPane.RowStyles.Add(New RowStyle(SizeType.AutoSize))

            End While

            MainPane.RowStyles.Add(New RowStyle(SizeType.Percent, 50.0!))

            MainPane.ColumnCount = 2

            MainPane.ColumnStyles(0).SizeType = SizeType.AutoSize

            MainPane.RowStyles(0).SizeType = SizeType.AutoSize

            MainPane.RowStyles(1).SizeType = SizeType.AutoSize

            Dim ProcessHeaderLabel As New System.Windows.Forms.Label

            ProcessHeaderLabel.Text = "Processnames"

            ProcessHeaderLabel.Font = New System.Drawing.Font(ProcessHeaderLabel.Font, FontStyle.Bold)

            ProcessHeaderLabel.Dock = DockStyle.Fill

            ProcessHeaderLabel.TextAlign = ContentAlignment.MiddleCenter

            Dim NALabel As New System.Windows.Forms.Label

            NALabel.Text = "Enabled for this Project"

            NALabel.Font = New System.Drawing.Font(ProcessHeaderLabel.Font, FontStyle.Bold)

            NALabel.AutoSize = True

            NALabel.Dock = DockStyle.Fill

            NALabel.TextAlign = ContentAlignment.MiddleLeft

            'the two headers

            MainPane.Controls.Add(ProcessHeaderLabel)

            MainPane.Controls.Add(NALabel)


            For Each p As Integer In Process_Dict.Keys

                Dim namelabel As New System.Windows.Forms.Label

                namelabel.AutoSize = True

                namelabel.Text = Process_Dict(p)

                namelabel.Dock = DockStyle.Fill

                namelabel.TextAlign = ContentAlignment.MiddleLeft


                Dim NACheckbox As New System.Windows.Forms.CheckBox

                boxes(p) = NACheckbox

                If (proj.NA_Processes.Contains(p)) Then

                    NACheckbox.Checked = True

                    states(p) = True

                Else

                    NACheckbox.Checked = False

                    states(p) = False

                End If

                NACheckbox.CheckAlign = ContentAlignment.MiddleCenter

                MainPane.Controls.Add(namelabel)

                MainPane.Controls.Add(NACheckbox)

            Next

        End If

        MainPane.Refresh()

    End Sub

End Class

und beim Tapwechsel der GUI welche meine Form enthält die myGUIinit Methode aufrufe, tut sich garnix, die beiden Labels die ich standartmäßig einbauen kann bleiben erhalten, aber von einer neuzeichnung ist nichts zu sehen

Ich denke der Trick, dass ganze nicht im Konstruktor zu machen, sondern im WindowLoaded event, dürfte hier schon abhilfe schaffen.

Btw: Keine Daten Initialisierung im Konstruktor. Da werden nur Controls für die GUI initialisiert und Render spezifische Properties gesetzt (Farben, Styles, wenn es sein muss auch default Texte). Für alles andere gibt es eben das Loaded event.

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.