문제

로 이 문제가 사용하는 경우 Graphics.DrawImage.

사용하는 경우 e.Graphics.DrawImage(Image, Point)OnPaint 페인트 비트맵'버퍼에'제어,그것은 나타나는 부분의 이미지는 생략합니다.버퍼가 채워에서 도우미는 방법에 직접 그리는 Bitmap 를 사용하여 Graphics 건설습니다.컨트롤 페인트,캐시된 비트맵에 그려진 제어합니다.

아무것도 나타나 생략될에는 비트맵 자체이기 때문에,나는 때 저장된 비트맵 디스크 및 검사 그것은,그것을 이내의 거리에 있습니다.더 보기(아래 이미지 참조)

이것은 무엇을 비트맵 버퍼처럼 보인:
buffer
(출처: zachjohnson.net)

이에 나타나는 것을 제어:
displayed value
(출처: zachjohnson.net)

이 모든 것은 내가 하기에 OnPaint:

protected override void OnPaint(PaintEventArgs e)
{
    base.OnPaint(e);
    if (this.bufferInvalid)
    {
        this.UpdateBuffer();
    }

    if (this.buffer != null)
    {
        e.Graphics.DrawImage(this.buffer, Point.Empty);
    }
}
도움이 되었습니까?

해결책

onpaint가 호출되면 Windows에는 유효하지 않은 영역이 있으며 그림을 그릴 수 있으며 다른 모든 것이 잘립니다. 직사각형 컨트롤을 업데이트하려면 Windows API에서 Invalidaterect를 호출하여 전체 사각형이 유효하지 않은 영역의 일부인지 확인해야합니다. onpaint는 유효하지 않은 컨트롤의 일부가있을 때마다 자동으로 호출됩니다.

다른 팁

시도할 수 있습니다 몇 가지가 있습니다.

  • 게시 코드를"UpdateBuffer"
  • 할 bitmap.저장(i.e버퍼입니다.저장)후 updatebuffer 전화 및 무엇인지 확인트맵과 같습니다.
  • 모든 컨트롤이 그려진 것이 없어되는 그린 투명한 등등....
  • 코드의"같은 메소드를 사용하"및"버퍼 업데이트"그리고 별도의 프로젝트는 테스트를 작동하는지 확인합니다.
  • take out"base.같은 메소드를 사용하"그리고 어떻게되는지 확인
  • 도 호출 bitmap.drawimageunscaled 대신 bitmap.drawimage
  • 도를 사용하여 새로운 관점(0,0)에 대신 점이다.빈(a 않고 촬영 하지만 나중에 결코 알지 못...)

톤의 옵션을 위해 디버깅이,문제의 축소.

확인하십시오 System.Windows.Forms.ControlStyles.ResizeRedraw

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