| |
VB.NET - Ein- und UmsteigerNach 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 | |
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! | |
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. | |
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? | |
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? | |
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. | |
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? | |
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. | |
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 | |
| 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 |
|
|
sevISDN 1.0
Überwachung aller eingehender Anrufe!
Die DLL erkennt alle über die CAPI-Schnittstelle eingehenden Anrufe und teilt Ihnen sogar mit, aus welchem Ortsbereich der Anruf stammt. Weitere Highlights: Online-Rufident, Erkennung der Anrufbehandlung u.v.m. Weitere InfosTipp des Monats Neu! sevPopUp 2.0
Dynamische Kontextmenüs!
Erstellen Sie mit nur wenigen Zeilen Code Kontextmenüs dynamisch zur Laufzeit. Vordefinierte Styles (XP, Office, OfficeXP, Vista oder Windows 8) erleichtern die Anpassung an die eigenen Anwendung... Weitere Infos
|