2009-09-27 4 views
2

다음 프로그램을 직접 작성하거나 타사 구성 요소를 사용해야하는지에 대한 조언이 필요합니다. 너무 많은 수하물없이 청구서에 맞는 제 3 자 구성 요소가 있다면 나는 추천을 감사 할 것입니다.그려진 그리드 - .NET

그리드 컨트롤과 같은 셀의 매트릭스 인 구성 요소를 갖고 싶습니다. 편집, 선택, 열의 동적 크기 조절, 기본 셀 그리기 동작, 마우스가 사물 위로 움직일 때 효과 없음, 키보드 단축키가 필요하지 않습니다.

내가 할 수있는 일은 각 셀을 직접 그리는 것이고 그리드의 크기가 부모 구성 요소의 사용 가능한 공간을 초과하면 스크롤 막대가 나타나야합니다. grid.Invalidate()

을하고이 같은 각각의 눈에 보이는 세포 뭔가 콜백을 얻을 : 즉

내가 말할 수 있도록하고 싶습니다

무효 DrawCell (INT X, int y, Graphics g, Rectangle cellDrawingRect)

+0

표시 할 셀의 수는 최대 몇 개입니까? 총 행/열? –

답변

2

내 충고는? 그리드의 크기를 계산하고, 이미지의 크기를 만들고, 그리드를 그리며, 이미지를 PictureBox에 넣고, 해당 PictureBox를 ScrollableControl에 넣습니다.

Picturebox로 처리 할 때 Control.Paint를 사용할 필요가 없습니다.

당신이 그렇게 생각한다면,이 모든 것을 UserControl에 넣을 수 있습니다. 이렇게하면 코드를 좀 더 재사용 할 수 있고 이식성을 높일 수 있습니다.

+0

이 방법을 사용하면 그림 상자가 보여주는 이미지의 비트 및 부분을 매끄럽게 업데이트 할 수 있으며 매번 새로운 이미지로 완전히 대체해야합니까? –

+0

아니요, 동일한 이미지에서 다시 그릴 수 있습니다. 그리기가 끝나면 PictureBox.Invalidate()를 호출해야합니다. –

0

사용자가 직접 컨트롤 (ScrollableControl에서 파생 된 컨트롤)을 작성하는 경우 매우 간단합니다. Handle Control.Paint를 사용하여 셀을 그리고 HorizontalScroll 및 VerticalScroll 속성을 사용하여 스크롤 막대를 조정합니다.

0

다음은 정확히이 주제에 내 이전 호언 장담이다

Need help creating control to display data

나는 확실히 그것을 기본적으로 읽기 전용 컨트롤의 특히 이후, 자신이 일을 추천 할 것입니다. 대부분의 기성품 그리드 구성 요소는 필요한 것보다 훨씬 많은 작업을 수행 할 수 있도록 제작되었으며, 필요한 모양으로 레슬링하면 처음부터 직접 작성하는 것보다 더 쉽게 노력할 수 있습니다.

Charlie Salts가 언급했듯이 큰 그림 상자에 전체 그림을 그려 작은 패널에서 옮기는 것이 더 쉬울 수도 있지만 전체 그리드의 크기에 따라 달라질 수 있습니다. 비트 맵은 많은 메모리를 차지할 수 있습니다.

+0

예 비트 맵 크기를 잊어 버렸습니다. 이것이 왜 누군가가 Control.Paint를 처리해야하는지에 대한 하나의 좋은 이유입니다. –

+0

너무 크지 않습니다. 최대 2500x2500 픽셀입니다. 보이는 부분 집합은 표준 창 크기보다 작거나 같은 것입니다. –

+0

@freddy : 25MB 정도의 Bitmap으로, 이는 아마도 사용자 목적에 맞을 것입니다. .NET Compact Framework에서 많은 작업을 수행합니다. 그 중 큰 비트 맵은 재앙입니다. – MusiGenesis

관련 문제