2010-01-15 2 views
1

현재 Windows Forms에 텍스트 상자가 있고 텍스트 상자 오른쪽에 PictureBox 상자 컨트롤을 동적으로 추가해야합니다.Anchored 때문에 너비가 증가한 Windows Forms 컨트롤의 너비를 결정하는 방법?

내가 프로그래밍에 PictureBox를 생성하고있는 PictureBox의 위치를 ​​설정할 때 나는, 나는 다음과 같이 설정하고 있습니다 :

pBox.Location = 새로운 포인트 (tbControl.Location.X + ctrl.Width, ctrl.Location .와이);

그래서 그림 상자를 텍스트 상자의 X 위치와 텍스트 상자의 너비에 위치하도록 설정합니다. 그러나 텍스트 상자에 오른쪽으로 설정된 앵커 속성이 있으므로 양식 상자와 테두리 사이의 간격을 채우기 위해 너비가 증가합니다.

문제는 텍스트 상자의 너비가 Textbox.Width의 실제 값보다 시각적으로 더 큽니다. Width 속성은 앵커되는 추가 너비를 고려하지 않습니다.

행운과 함께 Textbox.Bounds.Width, Textbox.ClientSize.Width, Textbox.DisplayRectangle.Width 등과 같은 속성을 이미 사용해 보았습니다. 이러한 모든 속성은 Anchor 속성으로 인해 크기가 조정 된 너비를 고려하지 않고 컨트롤의 원래 너비를 반환합니다.

누구나 내가 텍스트 상자의 실제 크기를 어떻게 결정할 수 있는지 알고 있습니까? 감사합니다.

답변

2

Width 속성은 고정되어 있는지 여부에 관계없이 컨트롤의 현재 너비를 항상 추적합니다. 그러나 TextBox는 컨테이너를 더 크게 만들면 PictureBox가 겹치게됩니다. PB도 오른쪽에 고정해야합니다.

+0

nobugz, 나는 pb의 시작점을 움직이는 대신 폭을 늘릴 것이므로 PB를 고정하는 것이 올바른 접근이라고 생각하지 않습니다. 텍스트 상자가 확장 될 때까지 PB를 추가하는 방법을 찾아야합니다. – GR7

+0

아니요, 양쪽에 고정되어 있으면 폭만 증가합니다. 오른쪽 앵커 만. –

+0

당신은 바로 nobugz였습니다! 오른쪽에있는 PB를 고정시키는 것이 트릭을 만들었습니다. 고맙습니다. – GR7

0

조정 된 크기가 반환되어야합니다. 잘못된 텍스트 상자를 참조하거나 크기가 실제로 변경되기 전에 쿼리를 수행하고 있습니다.

+0

당신이 옳은 것 같아요. John ... 폼이 표시되기 전에 컨트롤이 확장되었다고 생각하기 때문에 이상합니다. (내 프로그램은 이미 새로운 폼을 열 때 최대화됩니다.) 텍스트 상자가 확장되기 전에 컨트롤을 추가하는 과정이 진행 중입니다. 컨트롤을 고정한 후이를 수행하는 방법에 대한 아이디어가 있습니까? – GR7

+0

SizeChanged 알림을 구독하는 경우 충분히 늦었을 것입니다. –

+0

안녕하세요. nobugz의 솔루션이 효과가 있었지만, 당신이 제안한 접근법에 대해 궁금합니다. 다시 그리거나 텍스트 상자의 SizeChanged 이벤트에서 그림 상자의 위치를 ​​변경 했습니까? – GR7

관련 문제