Frage

  1. Ich mag eine scrollbare Liste von Bildern aus dem Internet und gibt dem Anwender die Möglichkeit, klicken Sie darauf abgeholt erstellen. Wie gehe ich über es in WinForms / C # zu tun? Ist es möglich, picturebox Steuerung / Kontrollen in das Listenfeld?

  2. hinzufügen
  3. Ich hat versucht, eine Liste von picturebox in Usercontrol dem Hinzufügen mit Autoscroll auf true gesetzt, die mir ein Gefühl wie mit einer List-Box geben wird, ist dies ein richtiger Ansatz?

  4. Ich habe auch versucht die Imagelocation des PictureBox an eine URI des Bildes einstellen und dann genannt Load (), um das Bild zu laden, es hat funktioniert, aber meine Form ist das Einfrieren up! Wie gehe ich auf jeden der picturebox in einer sequentiellen Art und Weise zu aktualisieren, ohne meine Form Einfrieren?

Danke, Azlam

War es hilfreich?

Lösung

Ich werde Ihre dritte Frage zuerst beantworten, becuase, dass der einzige ist weiß ich wirklich die Antwort auf. Es gibt eine LoadAsync () -Methode auf dem Bildrahmen, der das Bild in einem separaten Thread geladen und wird die App nicht hängen.

Wie bei den anderen Fragen, auch ich würde höchstwahrscheinlich mit einer Benutzersteuerung starten und die Bilder dort setzen. Das einzige, was ich vorschlagen kann, wäre zunächst eine Benutzersteuerung zu erstellen, die ein Bildfeld hat, und vielleicht ein mehrzeiliges Textfeld oder richtextbox daneben. Schalten Sie die Grenze auf das Textfeld aus und haben einen leichten Rahmen um die gesamte Steuerung. Dies ermöglicht es Ihnen, um das Bild anzuzeigen, mit etwas Text daneben. Dann Ihre tatsächliche endgültige Kontrolle wird nur eine Sammlung dieser Kontrollen mit der Fähigkeit, sie nach Bedarf hinzufügen.

- my 2 cents ...

Andere Tipps

Haben Sie vertikal scrollen etwas ausmachen?

Ich würde mit dem Steuerelement Datagridview als Basis starten und erstellen Sie die folgende Umsetzung:

1) Erstellen Sie benutzerdefinierte Spalte und Zelltyp aus DataGridViewImageColumn abzuleiten. Man könnte sie "CronosNetImageColumn", "CronosNetImageCell" nennen.

2) Erstellen Sie eine Klasse „CronosImageDetails“ die Zellendaten zu halten (einschließlich Eigenschaften für die Anzeige von Text und Bild-URL). Dies wird als Wert für jede Zelle eingeleitet. Ex:

ImageGrid.Rows.Add (neu CronosImageDetails {Displaytext = "Day at the Beach", ImageURL = "http: //...beach.jpg"});

3) überschreiben Sie die Zelle Paint () einen WebClient zu verwenden, um das Bild zu erhalten und verwenden e.Graphics.DrawImage (ImageObtainedFromWebClient) das Bild in der Zelle zu malen. Sie könnten verwenden e.Graphics.DrawString ((CronosImageDetails) value.DisplayText, ...), um den Text in der Zelle zu überlagern.

Diese schnelle Lösung würden Sie eine Scroll-Bildliste erhalten, die nur Bilder, wie der Benutzer blättert durch die Liste lädt und bietet eine solide Basis für Verbesserungen.

Empfohlene weitere Optimierungen:

Erstellen

A) eine Backbuffer Bitmap und Grafiken zum Zeichnen von Zellendaten.

B) Setup-Paint (), um einfach die Backbuffer zu malen, anstatt die Arbeit zu tun, um das Bild zu bekommen

Erstellen

C), um eine neue Zelle Methode Loadimage (), die einen neuen Thread hervorbringt, die das Bild herunter und malt sie auf den Back-Puffer.

D) Paint () (oder einen separaten Helfer-Thread) verfolgen, die Richtung und die Beschleunigung des Scrollens und Schätzung, die Zellen werden vorbelastet benötigen. Trigger Loadimage () auf diesen Zellen.

E) Initialisieren der Rückpuffer jeder Zelle mit einem Lade Bild.

F) Track und verwenden empirische Daten aus den Bildladezeiten festzustellen, welche Zellen vorbelastet werden müssen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top