문제

  1. 인터넷에서 가져온 스크롤 가능한 사진 목록을 만들고 사용자에게 클릭 할 수있는 기능을 제공하고 싶습니다. WinForms/C#에서 어떻게해야합니까? ListBox에 PictureBox Control/ Control을 추가 할 수 있습니까?

  2. AutoScroll이 True로 설정된 UserControl에 PictureBox 목록을 추가하려고 시도했습니다. Listbox를 사용하는 느낌이들 것입니다. 올바른 접근 방식입니까?

  3. 또한 PictureBox의 ImageLocation을 이미지의 URI로 설정 한 다음 Load () 호출하여 이미지를로드하면 작동했지만 내 양식이 얼어 붙었습니다! 내 양식을 얼지 않고 순차적으로 각 그림 박스를 어떻게 업데이트하려고합니까?

감사합니다, Azlam

도움이 되었습니까?

해결책

나는 당신의 세 번째 질문에 먼저 대답 할 것입니다. 사진 상자에는 지체가 나오는 스레드에 이미지를로드하고 앱을 걸지 않는 LoadAsync () 메소드가 있습니다.

다른 질문에 관해서는, 나도 사용자 컨트롤로 시작하여 이미지를 거기에 넣을 것입니다. 내가 제안 할 수있는 유일한 것은 먼저 사진 상자가있는 사용자 컨트롤과 그 옆에 멀티 라인 텍스트 상자 또는 RichTextBox가있는 사용자 컨트롤을 만드는 것입니다. 텍스트 상자의 테두리를 끄고 전체 컨트롤 주위에 약간의 테두리가 있습니다. 이렇게하면 이미지 옆에 텍스트가 표시되어 이미지를 표시 할 수 있습니다. 그런 다음 실제 최종 컨트롤은 필요에 따라 추가 할 수있는 기능을 갖춘 이러한 컨트롤의 모음 일뿐입니다.

-My 2 센트 ...

다른 팁

수직으로 스크롤하는 것이 신경 쓰나요?

DataGridView Control부터 기본으로 시작하여 다음 구현을 작성합니다.

1) DataGridViewImageColumn에서 파생 된 사용자 정의 열 및 CellType를 만듭니다. "cronosnetimagecolumn", "cronosnetimagecell"이라고 부를 수 있습니다.

2) 셀 데이터를 보유하기 위해 "cronosimagedEtails"클래스를 만듭니다 (디스플레이 텍스트 및 이미지 URL에 대한 속성 포함). 이것은 각 셀의 값으로 전달됩니다. 전:

imageGrid.rows.add (new cronoSimageDetails {displayText = "해변의 날", imageUrl = "http : //...beach.jpg"});

3) 셀 페인트 ()을 무시하여 웹 클리어를 사용하여 이미지를 가져 와서 e.graphics.drawimage (imageObtainedfromwebclient)를 사용하여 이미지를 셀에 페인트합니다. e.graphics.drawstring ((cronosimagedEtails) value.displayText, ...)를 사용하여 셀의 텍스트를 오버레이 할 수 있습니다.

이 빠른 솔루션을 사용하면 사용자가 목록을 스크롤 할 때 이미지 만로드하고 개선을위한 견고한 기반을 제공하는 스크롤 ImageList가 제공됩니다.

추가 최적화 권장 :

a) 셀 데이터를 그리기위한 백 버퍼 비트 맵 및 그래픽을 만듭니다.

b) 이미지를 얻기 위해 작업을 수행하는 대신 백 버퍼를 페인트하는 페인트 설정 ()

c) 이미지를 다운로드하고 뒷 버퍼에 페인트하는 새 스레드를 스폰하는 새 셀 메소드 LoadImage ()를 만듭니다.

d) Paint (또는 별도의 도우미 스레드)가 스크롤의 방향과 가속을 추적하고 어떤 셀이 사전로드되어야하는지 추정하는 방향을 추적하십시오. 해당 셀에서로드 이디 지 ()를 트리거합니다.

e) 로딩 이미지로 각 셀의 후면 버퍼를 초기화합니다.

f) 이미지 로딩 시간의 경험적 데이터를 추적하고 사용하여 어떤 셀을 사전로드 해야하는지 결정합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top