vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
sevAniGif - als kostenlose Vollversion auf unserer vb@rchiv CD Vol.5  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB.NET - Ein- und Umsteiger
Nach Programmstart über 400 controls erstellen 
Autor: Ortech
Datum: 27.06.17 11:41

Guten Morgen,

was kann ich tun, damit dieses Zeichnen nicht zu lange dauert.
Ich habe DoubleBuffer eingeschaltet, sonst würde es nochmal 5x länger dauern.

Es dauert konkret einige s beim einem i5 mit SSD.

Alternative wäre, dass ich einen Text anzeige, dass es zum Warten ist.
Läßt sich aber nicht anzeigen, denn die App startet, ohne dass man die Form sieht (und das Label).

Dann wir alles im Hintergrund gezeichnet und letztlich sieht man dann auch die Form.

Geht das irgendwie anders? Ich meine, kann man sich zuerst die Form mit dem Label anzeigen lassen, dann wird erst erstellt?

Gruß, ortech
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Nach Programmstart über 400 controls erstellen 
Autor: msSuper
Datum: 27.06.17 12:10

Guten Morgen,

bei Deinen Informationen müsste mann Hellseher sein.


Lässt du die 400 Controls in der Form.Load erstellen?

Dann ist es klar, dass man vorher nichts sieht.

Generell sind so viele Controls eher fehleranfällig und oft (nicht immer) gibt es auch eine bessere Lösung!
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Nach Programmstart über 400 controls erstellen 
Autor: Manfred X
Datum: 27.06.17 12:36

Hallo!

Ergänzend zum Beitrag von msSuper:

Wie soll ein Benutzer mit 400 Controls klar kommen?
Hast Du Dir mal über die Benutzerführung Gedanken gemacht.

Gewöhnlich clickt der User eine Option an und es öffnet sich
ein Unter-Dialog, in dem die erforderlichen Angaben und
Einstellungen erledigt werden. Die entsprechenden Controls
werden vor dem Öffnen des Unterformulars erstellt, dafür benötigte
Daten werden an Properties übergeben.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Nach Programmstart über 400 controls erstellen 
Autor: Ortech
Datum: 27.06.17 12:54

Im Programm wird Hardware simuliert, es sind hauptsächlich Checkboxen, die als Biteingabe dienen.
Ich hätte keine andere Idee das umzusetzen.

Wenn ich es nicht in der form load mache, muss ich auf ein Event warten, also auf einen Click eines Users. Das will ich aber nicht.

Die Wartezeit ist eher sekundär, viel mehr möchte ich den User informieren, dass er warten muss.
Aber wie soll ich das machen, wenn sich die Form ja nicht mal öffnet.

Gibt es da nicht etwas, was wartet, bis alles gezeichnet ist.

Kann ich die Zeichnerei ev. nach der form load Routine machen?
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Nach Programmstart über 400 controls erstellen 
Autor: msSuper
Datum: 27.06.17 13:14

Lege den Code in die form.Shown hinein.

Dann kannst Du in der Form.Load zunächst ein Wartelabel anzeigen bzw. eine weitere kleine WarteForm instanzieren und aufrufen.

Vermutlich wirst Du die Checkboxen ja in einem fixen Raster aufbauen.
Hast Du mal über die Vewendung von einem DataGridView nachgedacht?
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Nach Programmstart über 400 controls erstellen 
Autor: Manfred X
Datum: 27.06.17 13:34

Prüfe mal, ob das nicht mit einer Picturebox realisierbar ist.

Der Benutzer clickt mit der Maus jeweils an eine Position
in der Box (aufgeteilt in kleine Quadrate) und der zugeordnete
Boolsche Wert (in einem 2-D-Array) wird gesetzt/gelöscht.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Nach Programmstart über 400 controls erstellen 
Autor: Ortech
Datum: 27.06.17 14:20

ok, das mit form.shown funktionert. Danke!

Ja, ich baue die Checkboxen in einem Raster auf. Mit Datagridview würde das von der Bedienung her nicht gut funktionieren. Ich verwende eine Checkbox, um ein Bit zu setzen und gleichzeitig, um ein Ergebnis anzuzeigen (ich färbe die Checkbos ein).

Keine Ahnung, wie das mit einer PictureBox gehen soll.

Welche Methode liefert mir den die Koordinaten auf eine PictureBox zurück?
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Picturebox und Boolean-Array 
Autor: Manfred X
Datum: 27.06.17 14:32

Hier ein einfaches Code-Grundgerüst.
Man kann die Flächen vergrößern und Infos eintragen.
Public Class frmBoolInput
 
    Const Columns As Integer = 20
    Const Rows As Integer = 30
    Const ColumnWidth As Integer = 20 'Pixel
    Const RowHeight As Integer = 10 'Pixel
 
    Dim WithEvents pb As New PictureBox With {.Parent = Me}
    Dim bools(Columns - 1, Rows - 1) As Boolean
 
    Dim truecolor As Color = Color.Red
    Dim falsecolor As Color = Color.White
 
 
    Private Sub frmBoolInput_Load(sender As System.Object, _
                                  e As System.EventArgs) Handles MyBase.Load
 
        pb.Size = New Size(Columns * ColumnWidth, Rows * RowHeight)
        Me.Size = Size.Add(pb.Size, New Size(10, 30))
        Me.FormBorderStyle = _
              Windows.Forms.FormBorderStyle.FixedDialog
    End Sub
 
 
    Private Sub pb_MouseDown(sender As Object, _
        e As System.Windows.Forms.MouseEventArgs) Handles pb.MouseDown
 
        Dim colindex As Integer = e.X \ ColumnWidth
        Dim rowindex As Integer = e.Y \ RowHeight
        bools(colindex, rowindex) = Not bools(colindex, rowindex)
 
        pb.Invalidate()
    End Sub
 
 
    Private Sub pb_Paint(sender As Object, _
        e As System.Windows.Forms.PaintEventArgs) Handles pb.Paint
 
        Dim br As Brush, r As Rectangle
        Using brtrue As New SolidBrush(truecolor), _
            brfalse As New SolidBrush(falsecolor), _
            pFrame As New Pen(Color.Black)
 
            For i As Integer = 0 To Columns - 1
                For k As Integer = 0 To Rows - 1
                    br = If(bools(i, k), brtrue, brfalse)
                    r = New Rectangle _
                        (i * ColumnWidth, k * RowHeight, _
                         ColumnWidth, RowHeight)
                    e.Graphics.FillRectangle(br, r)
                    e.Graphics.DrawRectangle(pFrame, r)
                Next k
            Next i
        End Using
 
    End Sub
End Class


Beitrag wurde zuletzt am 27.06.17 um 14:33:39 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Nach Programmstart über 400 controls erstellen 
Autor: HenryV
Datum: 27.06.17 14:42

Vielleicht wäre auch etwas in dieser Richtung denkbar.
VB.NET Dynamic Grid Drawings
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Picturebox und Boolean-Array 
Autor: Ortech
Datum: 27.06.17 16:23

danke für eure Inputs! Werd sie mir bei Gelegenheit sicher ansehen.
Allerdings half bereits die Methode, um wenigstens auf Wartezeit hinzuweisen.

Schöne Grüße
Alois
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel