PicturBox

Hi,
für die PictureBox - PAINT habe ich folgende funktionierende Lösung über Versuch und Irrtum gefunden:
Code:
  Private Sub PicBox1_Paint(ByVal sender As Object, _
  ByVal e As System.Windows.Forms.PaintEventArgs) Handles PicBox1.Paint
    Dim gr As Graphics = e.Graphics
    Dim fnt As New Font("Tahoma", 10, FontStyle.Regular)
    Dim br As Brush = Brushes.Black
    Dim sf As StringFormat
    Dim s As String
    sf = New StringFormat()
    sf.Alignment = StringAlignment.Far ' rechtsbündiger Text
    s = "1"
    gr.DrawString(s, fnt, br, Me.PicBox2.Width, 2, sf)
    sf.Dispose()
  End Sub
Bei Deinem ursprünglichen Code, war mir Graphics im Wege
Code:
Graphics g = this.pictureBox1.CreateGraphics();
Bitte das nicht als Kritik, sondern ist nur als Fehlerbeschreibung zu verstehen.
Dessen ungeachtet hast Du gemeint, dass statt des Strings auch eine Variable möglich ist.
>>Und ja, du kannst da natürlich eine Variable hineinstecken.
Wenn du eine Integer Variable myInt hast,
kannst du einfach myInt.ToString() aufrufen
und bekommst dafür eine Stringrepräsentation zurück.<<
Mit Textboxen geht das folgende Beispiel, aber wie bei PicBoxen?
Code:
If Integer.TryParse(PicBox1.Text, z) Then   PicBox1.Text = z.ToString("N0")
Grüße und ich hoffe auf Deine Unterstützung.
 
Wieso verwendest du den Paint-Handler? Den musst du mit dieser Variante nicht verwenden. Denn der Paint-Handler wird jedes Mal aufgerufen, wenn die Form neu zu zeichnen ist. Der Wert ändert sich vermutlich jedoch nicht so oft. Sprich, du machst eigentlich ganz was anderes, als ich dir aufgezeigt habe. Aber du könntest mir durchaus erklären, warum du den Paint-Handler verwendest.

Du wirst dir den Wert wohl in einer Variable merken müssen, denn du ZEICHNEST den Wert in die PictureBox. D.h. du hast in deiner PicstureBox nur das Graphics-Objekt, welches deinen "Wert" repräsentiert. Viel Spaß beim Auslesen des Wertes aus einer Grafik.
 
Hi,
das letzte was ich möchte ist eine Disonanz. Sollte ich nicht die richtigen Worte gefunden haben, dann tut mir das leid.
Die aufscheinenden Ziffern in der PicBox sind jeweils einzelne Kombinationen und wechseln mehrere Millionen mal pro Durchlauf. Angezeigt werden allerdings nur 100.000er Schritte.
Im Prinzip ist es mir egal, ob es Text- Pic- oder sonstige Boxen sind. Mir geht es nur um die Funktionalität. Ich habe schon mitbekommen, dass es wesentlich andere Wege sind als in VB6, um zu einem Ergebnis zu kommen.:)
Da ich den Umstieg zu VB.Net "verschlafen" habe - weil es für mich nicht notwendig war - , bereut sich jetzt.
Meine Intention ist die dass der Inhalt der Kombinationen - nach Vorliegen bestimmter Kriterien -, in SqlExpress gespeichert werden. Es geht mir also darum, zuerst die Variablen in die Box zu schreiben um sie dann zu speichern.
Ich hoffe, dass ich mein Problem nicht zu umständlich umschrieben habe.
Grüße
 
Folgendes:

Du hast einen Algorithmus, der Zahlen berechnet, oder sonst irgendwas tut. Ich setze den nun einfach mit einer For-Schleife gleich. Nach n Berechnungen soll ein Wert in der PictureBox angezeigt werden.
Code:
for (int i = 0; i < 10000000; i++)
{
    if (i % 100000 == 0) 
    {
        Graphics g = this.pictureBox1.CreateGraphics();
        g.FillRectangle(new SolidBrush(this.pictureBox1.BackColor), 0, 0, this.pictureBox1.Width, this.pictureBox1.Height);
        g.DrawString(i.ToString(), new System.Drawing.Font("Arial", 12), new SolidBrush(Color.Black), 0, 0);
        Application.DoEvents();
    }
    // hier i (Wert) speichern
}
Gut, dabei gehen wir davon aus, dass i der Wert ist, den du darstellen und speichern willst. Im obigen Beispiel wird die PictureBox geupdated, wann immer volle 100.000 erreicht wurden. Da du jedoch immer Zugriff auf den Wert i hast, kannst du den auch bei jedem Durchlauf wegspeichern, oder du schreibst ihn dir in ein Array, oder was auch immer.

Das ganze machst du, beim Durchlauf deines Algorithmuses und nicht im Paint-Eventhandler deiner PictureBox.

Und ich hab auch einen kleinen Test gemacht:
In die PictureBox schreiben (diese updaten) ist um gute 33% schneller, als ein Label abzudaten. Hätte ich mir persönlich zwar nicht wirklich gedacht, aber scheint so zu sein. Wobei ich hier nicht auf die Größe der PictureBox geachtet habe. Kann durchaus sein, dass es sich bei einer PictureBox von 1024 * 768 wieder anders verhält.
EDIT: Die Tests wurden auf einem Centrino durchgeführt mit .NET 2.0. Auf einem Dual-Core und .NET 1.1 herrscht nahezu Ausgeglichenheit, mit kleinen Vorteilen für das Label.
 
Hi,
genauso ist es!
Ich danke Dir aus ganzem Herzen, denn ich habe wirklich jede Menge gegoogelt... und keinen zufriedenstellenden Hinweis gefunden.
Dass die PicBoxen wesentlich schneller sind als Labels ist richtigerweise auch nicht auf meinem Mist gewachsen, sondern die gesicherte Erkenntnis von einem aus meiner Sicht wirklich begnadetem Array-Programmierer der bedauerlicherweise einen schweren Schicksalsschlag erlitten hat. In den diversen Foren war er DIE Ansprechperson für Sortieralgorhytmen. Das nur zur Ergänzung.
Nochmals recht herzlichen Dank für Deine Geduld und Hilfestellung.
Noch ein Nachtrag:
Ich generiere ca. 215 Mio. Permutationen aus denen ich ca. 60igtausend Übereinstimmungen speichere. Dafür benötige ich bei VB6 ca. 30 Min mit einem P4, 2.2. Ghz, und 1 GB RAM.
Hingegen benötige ich mit vbExpress2005 und Deiner Lösung NICHT EINMAL 1 Minute(!), allerdings ohne Datenspeicherung. Zur Kontrolle des i-Wertes habe ich noch ein Label zwischengeschaltet (was natürlich dann wegfällt)
U N G L A U B L I C H!
 
Zuletzt bearbeitet:
Ach ja, ich hab dir ja C# Code gepostet. Sorry, bin es nicht gewohnt etwas in VB.NET zu machen ;-)

Aber freut mich, dass es funktioniert.
 

Neue Beiträge

Zurück