Domanda

  1. Voglio creare un elenco scorrevole di immagini recuperate da Internet e dare all'utente la possibilità di fare clic su di esso. Come faccio a farlo in WinForms / C #? È possibile aggiungere controlli / controlli Picturebox a ListBox?

  2. Ho provato ad aggiungere un elenco di immagini in UserControl con AutoScroll impostato su true, il che mi darà la sensazione di usare un listBox, è un approccio giusto?

  3. Ho anche provato a impostare ImageLocation di pictureBox su un URI dell'immagine e poi ho chiamato Load () per caricare l'immagine, ha funzionato, tuttavia il mio modulo si sta congelando! Come posso continuare ad aggiornare ciascuna delle immagini in modo sequenziale senza congelare il mio modulo?

Grazie, Azlam

È stato utile?

Soluzione

Risponderò prima alla tua terza domanda, perché è l'unica a cui conosco VERAMENTE la risposta. C'è un metodo LoadAsync () nella casella dell'immagine che carica l'immagine in un thread separato e non bloccherà la tua app.

Per quanto riguarda le altre domande, molto probabilmente anch'io inizierei con un controllo utente e inserivo le immagini. L'unica cosa che posso suggerire sarebbe di creare prima un controllo utente che abbia una casella immagine e forse una casella di testo multilinea o una casella richtext accanto ad essa. Disattiva il bordo sulla casella di testo e presenta un leggero bordo attorno all'intero controllo. Ciò ti consentirà di visualizzare l'immagine, con del testo accanto. Quindi, il tuo effettivo controllo finale sarà solo una raccolta di questi controlli con la possibilità di aggiungerli quando necessario.

--mio 2 centesimi ...

Altri suggerimenti

Ti dispiace scorrere verticalmente?

Vorrei iniziare con il controllo DataGridView come base e creare la seguente implementazione:

1) Crea colonna e tipo di cella personalizzati derivanti da DataGridViewImageColumn. Potresti chiamarli " CronosNetImageColumn " ;, " CronosNetImageCell " ;.

2) Crea una classe " CronosImageDetails " per conservare i dati della cella (includere le proprietà per visualizzare il testo e l'URL dell'immagine). Questo verrà passato come valore per ogni cella. Es:

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

3) Sostituisci la cella Paint () per usare un WebClient per ottenere l'immagine e usa e.Graphics.DrawImage (ImageObtainedFromWebClient) per dipingere l'immagine sulla cella. È possibile utilizzare e.Graphics.DrawString ((CronosImageDetails) value.DisplayText, ...) per sovrapporre il testo nella cella.

Questa rapida soluzione ti darebbe una lista di immagini a scorrimento che carica le immagini solo mentre l'utente scorre l'elenco e fornisce una solida base per il miglioramento.

Ulteriori ottimizzazioni consigliate:

A) Crea una bitmap e una grafica di backbuffer per disegnare i dati delle celle.

B) Setup Paint () per semplicemente dipingere il backbuffer invece di fare il lavoro per ottenere l'immagine

C) Crea un nuovo metodo di cella LoadImage () che genera un nuovo thread che scarica l'immagine e la dipinge sul buffer posteriore.

D) Disegna Paint () (o un thread di supporto separato) che traccia la direzione e l'accelerazione dello scorrimento e stima quali celle devono essere precaricate. Trigger LoadImage () su quelle celle.

E) Inizializza il back buffer di ogni cella con un'immagine di caricamento.

F) Traccia e usa i dati empirici dai tempi di caricamento dell'immagine per determinare quali celle devono essere precaricate.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top