2009-10-21 7 views
4

컨트롤을 폼에 추가하고 Anchor 속성을 어떻게 변경했는지를 바꿨지 만 런타임에 폼의 크기를 조정하면 컨트롤이 같은 위치에 유지됩니다.C# Anchor 속성이 작동하지 않는 것 같습니다.

예를 들어, 양식의 오른쪽 하단 모서리에 두 개의 버튼이 있습니다. 양식에 있거나 컨테이너가 없거나 그런 항목이 있습니다. 앵커 = 아래쪽, 오른쪽. FormBorderStyle = 크기. 그러나 실행 중에 폼을 드래그하여 크기를 조정하면 버튼이 움직이지 않습니다.

내가 누락 된 항목이 있습니까?

C# 2005

+0

과거에는 항상 저에게 효과가 있었기 때문에 당신이 뭔가 잘못하고있는 것 같아요. 코드 샘플 (designer.cs 파일에서 확인)을 게시하거나 문제를 보여줄 수있는 스크린 샷을 게시 할 수 있습니까? –

+0

새 양식을 추가하고 단추를 추가하고 '앵커'를 '아래쪽, 오른쪽'으로 설정하십시오. 이것이 실제로 작동하는 경우, 물건이 원래 형태로 완료되는 방식에 문제가 있음을 의미합니다. 새로운 양식이 작동하지 않으면, 나는 무엇이 잘못되었는지 전혀 모른다 ... – awe

답변

3

Dock 속성은 무엇으로 설정되어 있습니까? 이는 앵커 속성을 무효화 할 수 있습니다.

+0

버튼을 위해, 맞지? "없음"으로 설정됩니다. – flamey

10

또 다른 가능성은 의도하지 않게 양식에 직접 단추를 두지 않았을 가능성입니다. 대신에 컨테이너 (예 : panel, tableLayoutPanel 등)에 컨테이너를 배치하면이 컨테이너는 앵커 또는 도킹 값을 올바르게 설정하지 않습니다.

designer.cs를 살펴보고 버튼이 this.Controls.Add() 기능에 의해 직접 추가되었는지 또는 다른 컨트롤 목록 (예 : panel.Controls.Add())에 추가되었는지 확인하십시오.

+11

양식의 모든 컨트롤에 대한 계층 적 개요가 필요하면 문서 개요 패널을 엽니 다. 디자인 모드에서보기 -> 다른 윈도우 -> 문서 개요 – Mez

+1

그냥 새로운 것을 배웠습니다 ... 나는 '문서 개요'를 알지 못했지만 위대한 계층 적 개요를 제공하고 드래그 앤 드롭도 지원합니다! – Oliver

+0

나는 무엇이 일어나고 있는지 알아 내려고 시작하고있다.하지만 FlowLayoutPanels는 앵커 동작을 엉망으로 만든다. 여기에 약간의 정보가 있습니다. 현재의 상태는 확실하지 않습니다. https://docs.microsoft.com/en-us/dotnet/framework/winforms/controls/how-to-anchor-and-dock-child-controls-in -a-flowlayoutpanel-control – Toadfish

4

또한 자동 크기 속성을 설정하면 문제가 발생할 수 있습니다.

2

나는이 글을 오래 전부터 알고 있지만 어쨌든 기여하려고합니다.

제 문제는 부모 패널의 크기가 변경되었을 때 패널에 추가하는 양식이 자동으로 크기를 조정하지 않았기 때문입니다.

문제

내가이 일을 한 것이 었습니다 :

form.WindowState = FormWindowState.Maximized; // <-- source of the problem 
form.AutoSize = true; //this causes the form to grow only. Don't set it if you want to resize automatically using AnchorStyles, as I did below. 
form.FormBorderStyle = FormBorderStyle.Sizable; //I think this is not necessary to solve the problem, but I have left it there just in case :-) 
panel1.Controls.Add(form); 
form.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 
        | System.Windows.Forms.AnchorStyles.Left) 
        | System.Windows.Forms.AnchorStyles.Right))); 
form.Dock = DockStyle.Fill; //this provides the initial size adjust to parent' size. 
form.Visible = true; 

를 해결하기 위해, 난 그냥 첫 번째 줄 //form.WindowState = FormWindowState.Maximized; 댓글을 달았 모든 것이 마법처럼 일했다.

0

나는 똑같은 문제가있었습니다.

상황 : autosize 설정 한 행과

TableLayoutPanel. 이 행에 고정 권리, 바닥은 작동하지 않았다. autoSize을 제거하고 고정 높이에두면 user428955에서 지정한대로 문제가 해결되었습니다.

1

VS11 베타에서도 동일한 문제가 있습니다. 나는 앵커를 여러 번 사용 했었지만 항상 올바르게 작동했지만, 지금은 그들과 무슨 일이 일어나고 있는지 이해할 수 없으며, 도크 채우기가 작동하지 않습니다! (자동 크기 또는 도크 속성이 사용되지 않음)

P. (40 분 후) 이제는 문제가 발견 된 것 같습니다. PictureBox에 대한 Resize 이벤트 리스너가 있고 onResize 핸들러에 새 picturebox 크기에 대한 새 이미지를 만듭니다. 새로운 이미지 생성을 제거하면 모든 것이 작동합니다!

이제는 SizeChanged 이벤트를 사용하고이 이벤트 핸들러에서 새 이미지를 만듭니다. Resize가 끝날 때까지 보낸 사람 개체를 변경해서는 안됩니다.

0

내 문제는 매우 간단합니다.
내 컨트롤 앵커 속성이 모두 올바르게 설정되어 있고 패널 안에 포함되어 있습니다.
하지만 앵커 스타일을 컨테이너 패널에 설정하는 것을 잊어 버렸습니다. 그래서 컨테이너 패널의 앵커 속성을 설정 한 후에 모든 것이 예상대로 작동 했으므로 컨테이너 패널이 폼 테두리에 따라 확장되지 않았습니다.

관련 문제