1
나는 다음 할당, 동적 몇 pictureboxes를 만드는 오전 : 각각의 다른 일련 번호를 그림 상자를 생성하고 기록하도록되어PaintEventHandler 논리적 문제
// class variable
public String PaintLabel;
// private void Form2_Load(object sender, EventArgs e)
//begin loop
this.PaintLabel = serialno;
Shapes[i].Paint += new PaintEventHandler(ctl_Paint);
// end loop
// my event override
private void ctl_Paint(object sender, PaintEventArgs e)
{
Control tmp = (Control)sender;
using (Font myFont = new Font("Arial", 9, FontStyle.Bold))
{
e.Graphics.DrawString(this.PaintLabel, myFont, Brushes.LightYellow, new Point(62, 2));
} // using (Font myFont = new Font("Arial", 10))
} // private void ctl_Paint(object sender, EventArgs e)
. 그러나이 그림 상자
모두에있는 마지막 일련 번호를 기입 끝편집 :
좋아, 솔루션 나를 위해 매우 고급입니다. 그러나 나는 그것을 이해하려고 노력했다.
나는 내 조각을 귀하의 코드에 추가했습니다. 내 루프에서
MyControl[] Shapes = new MyControl[Num_Picbox];
을 다음과 같이
그런 다음 내 그림 상자의 배열을 변경 나는 다음Shapes[i].SerialNumber = serialno;
Shapes[i].Paint += new PaintEventHandler(ctl_Paint);
을했다하지만이 코드를 컴파일하고 실행하면 그것은에있는 일련 번호를 그릴 나던 picturebox.
해상도 :
감사합니다. 나는 페인트 이벤트가 지역 변수를 참조 couldnt는 그것을 분류
Dictionary<Control, string> PaintLabels = new Dictionary<Control, string>();
에
var PaintLabels = new Dictionary<Control, string>();
을 변경했습니다.
감사합니다. 지금은 더 잘 이해합니다. 그림 상자에 그림을 그리려는 변수를 어떻게 할당합니까? 델리게이트 함수를 사용합니까? 이 문제를 해결하는 방법을 모르겠습니다. – Thomas
각 그림 상자에 페인트 함수를 실행하고 각기 다른 일련 번호를 그릴 필요가 있기 때문에 직렬로 페인트 이벤트 처리기를 전달하고 현재 수행중인 문자열을 다시 사용하지 않아야합니다. – Thomas
당신은 내 코드 샘플에서 대답을 가지고있다. 'PaintLabel'은 각'PictureBox' 컨트롤을 키로 사용하는 사전입니다. 페인트 이벤트 핸들러에서'tmp' 변수를 키로 사용하여 사전에서 해당 문자열을 가져올 수 있습니다 (내 대답의'DrawString' 샘플 참조). –