2008-10-24 1 views
0

이 문제는 매우 간단하지만 시각적으로 가장 잘 설명됩니다. 모든 스크린 샷은 Visual Studio 2005 디자인 화면에 있습니다. 실제로 응용 프로그램을 실행할 때 아무런 차이가 없다는 것을 알았습니다.다른 사용자 컨트롤 (때로는)에서 Winforms 사용자 정의 컨트롤이 잘리는 경우

은 여기 내 사용자 정의 컨트롤 (의이 UC-1를 부르 자)는 : 컨트롤에

alt text http://i34.tinypic.com/wciaer.png

버튼은 하단 + 마우스 오른쪽 단추로 고정하도록 설정되어 있습니다. 여기

은 특정 부모 사용자 컨트롤 (UC-A)에 배치 할 때 모습입니다 :

alt text http://i37.tinypic.com/2emnak9.png

색상 등의 차이를 무시하십시오. 일부 스타일은 사용자 정의 컨트롤의 생성자에서 수행됩니다.

컨트롤의 아래쪽이 잘리는 것을 볼 수 있습니다. 부모에서 소비 된 컨트롤의 인스턴스는 "FixedSingle"테두리로 설정됩니다. 또한 소비 된 컨트롤의 높이가 원래보다 높다는 것을 알 수 있습니다. 이는 버튼 하단 앵커 설정이 존중되고 있음을 나타내지 만 본질적으로 오버 슛을 의미합니다.

다른 사용자 컨트롤이 확실히 부모 컨트롤에 문제가 확인주의 사항 (UC-2) 같은 상위에 배치 할 때 데이터 그리드보기를 포함 : 다시

alt text http://i34.tinypic.com/2rgci7o.png

, 인스턴스 소비 된 컨트롤의 "FixedSingle"경계가 설정되어 클리핑을 설명하는 데 도움이됩니다. DataGrid가 Bottom Right에 제대로 고정되었습니다. 이 문제의 혼란을 강화하기 위해, 여기에서 제 1 사용자 제어이다 (UC-1) 다른 상위 사용자 제어 (UC-B)에 배치 된 (여기서 alt text http://i38.tinypic.com/2rnyjd0.png

번째 "소비"컨트롤 UC -2) 형태로 소비 할 때 :

alt text http://i34.tinypic.com/rr8uc9.png

공지 사항, 아니 클리핑이 시간을.

나는 이것을 해결하기 위해 많은 시간을 들여 실험을 해왔다. 나는 여백, 채우기, 크기 (최소/최대), 위치, 앵커 등 다양한 설정을 다 써 버렸습니다.이 인생의 한 순간에 왜이 한 명의 사용자 정의 컨트롤이 이런 식으로 클립하는 자식 사용자 컨트롤을 일으키는 지 알 수 없습니다. .

내가 알아챈 또 다른 이상한 점은 부모 사용자 컨트롤 디자인 화면 (컨트롤이 올바르게 작동하지 않는 곳)에서 실행 취소 작업을 수행하면 실행 취소 동작이 해당 컨트롤과 관련이 없는데도 잘린 사용자 컨트롤 인스턴스가 실제로 위치를 이동한다는 것입니다. 예를 들어 주 컨트롤을 포함하는 컨트롤을 크게 만든 다음 실행 취소하면 몇 가지 하위 사용자 컨트롤이 위로 올라갑니다. 그들은 깎을 때까지 움직이는 것처럼 보입니다. 아주 의심 스럽네.

아무도 무슨 일이 일어나고 있는지 전혀 생각하지 못합니까 ??

+0

해결 방법을 찾으셨습니까? – idstam

+0

아니요. 작년에 한 프로젝트에서 제가 오랫동안 작업하지 않은 문제였습니다. 디자인 시간 문제 였기 때문에 우리가 일을 처리 한 후에는별로 염려하지 않으므로 더 이상 생각하지 않았습니다. – Peter

답변

1

매우 흥미로운 문제!

문제가있는 학부모 (UC-A)가 크기 조정이나 클라이언트 영역 주변의 방법보다 우선합니까?

UC-A가 Padding 또는 Margin의 맨 아래 값에 대해 음수 값을 얻었습니까?

UC-A의 아래쪽 가장자리에 도킹 된 것이 있습니까? 아마도 크기가 음수 일 수도 있습니다.

또는 UC-A는 하위 컨트롤의 제약 조건을 설정합니까? 패널의 최소 높이가 너무 커지면이 결과가 나타납니다.

희망이 있습니다. 그렇지 않다면 UC-A에 소스를 게시 할 수 있습니까?

0

부모 컨트롤이 표준 .NET 프레임 워크 유형이 아니라 사용자 지정 UI가 아니라고 가정하면 클라이언트와 화면 좌표가 어딘가에 논리가 섞여 있다고 추측 할 수 있습니다. 그러나 그것은 단지 추측입니다.

1

나는 똑같은 문제가 있었으며 가능한 해결책을 찾고있는 동안 게시물을 발견했습니다. 비록 이것이 꽤 winforms의 버그라고 확신하지만, 나는 약간의 해결 방법을 발견했다. 사용자 정의 컨트롤에 모든 것을 패널 안에 넣고 패널을 완전히 도킹 한 다음 패널 내부에 앵커링을 수행하면됩니다. 내 버튼이 상위 컨트롤에서와 약간 다른 크기로 표시 되더라도이 문제를 완화하는 것으로 보입니다. 엄청 이상해. 저는 디자이너에서 버튼을 더 작게 만들어 보았습니다. 그리고 약간의 알려지지 않은 이유로 부모 컨트롤에서 약간의 픽셀만큼 넓게 펼쳐져 있습니다. 희망이 도움이됩니다.

관련 문제