Buscando fotos a partir da rede e exibi-lo sequencialmente
-
11-07-2019 - |
Pergunta
-
Eu quero criar uma lista de rolagem de imagens obtido a partir da internet e dar ao usuário a capacidade de clicar nele. Como faço para ir sobre fazê-lo em WinForms / C #? É possível adicionar controle picturebox / controles para a caixa de listagem?
-
Eu tentei adicionar uma lista de picturebox em UserControl com AutoScroll conjunto para true, o que vai me dar uma sensação como o uso de uma caixa de listagem, é uma abordagem correta?
-
Eu também tentei definindo o ImageLocation do pictureBox a um URI da imagem e, em seguida, chamado Load () para carregar a imagem, ele fez o trabalho, no entanto a minha forma está congelando-se! Como faço para ir sobre como atualizar cada um dos picturebox de um modo sequencial sem congelar minha forma?
Obrigado, Azlam
Solução
Eu vou responder a sua terceira questão em primeiro lugar, becuase que é a única que eu realmente sei a resposta. Há um método LoadAsync () na caixa de imagem que irá carregar a imagem em um segmento separado e não irá travar a sua aplicação.
Quanto às outras questões, também eu provavelmente começar com um controle de usuário e colocar as imagens lá. A única coisa que posso sugerir seria primeiro criar um controle de usuário que tem uma caixa de imagem, e talvez uma caixa de texto de várias linhas ou richtextbox ao lado dele. Desligue a fronteira na caixa de texto, e têm uma ligeira borda em torno de todo o controle. Isso permitirá que você para exibir a imagem, com algum texto ao lado dele. Então, seu controle final efectivo vai ser apenas uma coleção desses controles com a capacidade de adicionar-los quando necessário.
- meus 2 centavos ...
Outras dicas
Você se importa de rolagem vertical?
Gostaria de começar com o controle DataGridView como uma base e criar a seguinte aplicação:
1) Criar coluna personalizada e CellType decorrente DataGridViewImageColumn. Você poderia chamá-los de "CronosNetImageColumn", "CronosNetImageCell".
2) Crie uma classe "CronosImageDetails" para conter os dados celulares (inclui propriedades para texto de exibição e URL da imagem). Isso vai ser passado como o valor para cada célula. Ex:
ImageGrid.Rows.Add (novas CronosImageDetails {ExibirTexto = "Day at the Beach", ImageURL = "http: //...beach.jpg"});
3) Substituir a Tinta celular () para usar um WebClient para obter a imagem e usar e.Graphics.DrawImage (ImageObtainedFromWebClient) para pintar a imagem para a célula. Você poderia usar e.Graphics.DrawString ((CronosImageDetails) value.DisplayText, ...) para sobrepor o texto na célula.
Esta solução rápida que você obtenha um imagelist de rolagem que carrega apenas imagens como o usuário rola a lista e fornece uma base sólida para a melhoria.
recomendados otimizações adicionais:
A) Criar um bitmap backbuffer e gráficos para o desenho de dados celulares.
B) Pintura Setup () para simplesmente pintar o backbuffer em vez de fazer o trabalho para obter a imagem
C) criar um novo método LoadImage célula () que gera um novo segmento que baixa a imagem e tintas de TI para o tampão para trás.
D) têm de pintura () (ou um fio auxiliar separado) controlar a direcção e a aceleração de rolagem e estimativa de que as células têm de ser pré-carregado. Gatilho LoadImage () nessas células.
E) inicializar o tampão para trás de cada uma das células uma imagem de carga com.
F) Pista e utilizar os dados empíricos das vezes imagem de carga para ajudar a determinar quais as células têm de ser pré-carregado.