원을 그리는 데 패널을 사용하고 있지만 탭을 변경하거나 프로그램을 최소화 할 때 문제가 발생합니다. & 다음 프로그램을 최대화 한 다음 제거 된 모든 요소가 제거됩니다. 어느 것이 그 이유가 무엇인지 말해 줄 수 있습니까?창 모양의 패널에 도형을 그리는 방법은 무엇입니까?
0
A
답변
0
컨트롤이 무효화 된 다음 다시 그려지는 것이 그 이유입니다.
Paint
이벤트를 잡고 패널 내부에서 필요한 모든 것을 다시 그려야합니다.
이 이벤트는 컨트롤을 부분적으로 완전히 그려야 할 때마다 발생합니다.
사용자 주석 후 편집 : 사용자가 뭔가를 그릴 때, 당신이
List
의 모양 (형태와 다양한 좌표)를 저장하고, Paint
이벤트, 위에서 아래로 목록에 포함 된 모든 것을 다시 그릴 수
.
0
그리는 것은 (기본적으로) 지속성이 없으며 임의의 문자를 잃어 버릴 수 있습니다. (덮어서 숨기고 최소화, UAC 프롬프트 등) 이 문제를 해결하려면 무엇을 그려야하고 Paint
이벤트에서 다시 그려야합니까?
5
코드를 게시하지 않았기 때문에 모든 독자는 추측 할 수 있습니다. 내 생각 엔 당신이 실수로 CreateGraphics를 사용하고있을 가능성이 높습니다.
패널의 페인트 이벤트는 다음과 같아야합니다.
private void panel1_Paint(object sender, PaintEventArgs e) {
e.Graphics.SmoothingMode = SmoothingMode.AntiAlias;
e.Graphics.FillEllipse(Brushes.Red, new Rectangle(10, 10, 32, 32));
}
페인트 이벤트에서 모든 도면을 수행합니다. 새로 고침을하려면 panel1.Invalidate()
으로 전화하십시오.
비트 맵 그리기 경우,이처럼 처리 할 수있는 :
Bitmap bmp = new Bitmap(500, 500);
private void button1_Click(object sender, EventArgs e) {
using (Graphics g = Graphics.FromImage(bmp)) {
g.SmoothingMode = SmoothingMode.AntiAlias;
g.Clear(Color.White);
g.FillEllipse(Brushes.Red, new Rectangle(10, 10, 32, 32));
}
panel1.Invalidate();
}
private void panel1_Paint(object sender, PaintEventArgs e) {
e.Graphics.DrawImage(bmp, new Point(0, 0));
}
0
버퍼링을 다음과 같이 : 이 (당신은 양식 부하에 더 큰 비트 맵을 강제로 크기를 조정 양식에 다시 그리기 건너 뛸 수 있습니다.)
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace WindowsFormsApplication10
{
public partial class Form1 : Form
{
Bitmap bitmap = null;
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
Redraw();
}
protected override void OnPaintBackground(PaintEventArgs e)
{
OnPaint(e);
}
protected override void OnPaint(PaintEventArgs e)
{
if (bitmap == null)
{
base.OnPaint(e);
}
else
{
e.Graphics.DrawImageUnscaled(bitmap, 0, 0);
}
}
private void Form1_Resize(object sender, EventArgs e)
{
Redraw();
}
private void Form1_ResizeEnd(object sender, EventArgs e)
{
Redraw();
this.Invalidate();
}
private void Redraw()
{
if (bitmap != null)
{
bitmap.Dispose();
bitmap = null;
}
bitmap = new Bitmap(this.Width, this.Height, System.Drawing.Imaging.PixelFormat.Format32bppArgb);
using (Graphics g = Graphics.FromImage(bitmap))
{
g.Clear(Color.White);
// This is where you could use a List<Shape> etc...
g.DrawEllipse(Pens.Black, new Rectangle(10, 10, 20, 20));
g.DrawEllipse(Pens.Black, new Rectangle(20, 30, 20, 20));
g.DrawEllipse(Pens.Black, new Rectangle(50, 90, 30, 20));
}
}
}
}
관련 문제
- 1. 자바 스크립트 모양의 도형을 그리는 도형
- 2. 경로 요소로 도형을 그리는 방법은 무엇입니까?
- 3. 손가락으로 WP7에서 도형을 그리는 방법은 무엇입니까?
- 4. JFrame에서 캔버스를 만들고 몇 가지 기본 도형을 그리는 방법은 무엇입니까?
- 5. AutoCAD를 열고 도형을 그리는 방법?
- 6. 캔버스에서 도형을 식별하는 방법은 무엇입니까?
- 7. HTML5 캔버스 위에 대화식으로 도형을 그리는 방법은 무엇입니까?
- 8. Swing의 타일 모양의 창
- 9. 창 모양의 그림 문제
- 10. 플로팅 벌집 모양의 창
- 11. C# 양식 : 패널에 창 표시
- 12. 창 형태의 패널에 패널에서
- 13. 이미지가있는 패널에 점을 그리는 방법
- 14. 그림 상자에서 도형을 드래그하는 방법은 무엇입니까?
- 15. 창 크기에 따라 모양의 크기를 조정하는 방법은 무엇입니까?
- 16. Excel 2007에서 모양의 위치를 계산하는 방법은 무엇입니까?
- 17. JPanel에서 도형 그리는 방법은 무엇입니까?
- 18. MKMapView에서 모양을 그리는 방법은 무엇입니까?
- 19. HTML의 텍스트 영역에 그림을 그리는 방법은 무엇입니까?
- 20. drawingContext에서 FrameworkElement를 그리는 방법은 무엇입니까?
- 21. Objective-C에서 창 제목 표시 줄을 그리는 방법은 무엇입니까?
- 22. .NET 창 응용 프로그램에서 동적으로 버튼을 그리는 방법은 무엇입니까?
- 23. 창을 다시 그리는 방법은 무엇입니까?
- 24. 패널에 이미지를 추가하는 방법은 무엇입니까?
- 25. 개요 텍스트를 효율적으로 그리는 방법은 무엇입니까?
- 26. 도형이 html5 캔버스에서 다른 도형을 때리는 지 감지하는 방법은 무엇입니까?
- 27. 코드에서 WPF 창에 도형을 추가하는 방법은 무엇입니까?
- 28. WPF에서 캔버스의 도형을 이동하는 방법은 무엇입니까?
- 29. JavaFX 2.0에서 기하학적 도형을 만드는 방법은 무엇입니까?
- 30. 텍스트 상자처럼 작동하는 도형을 만드는 방법은 무엇입니까?
어떤 객체의 이벤트를 그리는 중입니까? – Nighil