2010-06-21 7 views
0

최근에 저는 Visual Studio 2010 및 C#에 대해 인턴 과정에 대해 알기 시작했습니다. C#에는 내장 된 InputBox 함수가 포함되어 있지 않으므로 텍스트 상자, 두 개의 단추 및 간단한 레이블로 자신의 양식을 만들었습니다.C# 레이블 속성이 크기 변경시 업데이트되지 않습니다.

프로그래머가 일반 형식 (사용자가 텍스트 상자를 통해 입력 한 경우) 또는 예/아니오 형식 (양식에 질문과 예/아니요 단추 만 표시하는 형식)).

예/아니오 형식으로 전환 할 때 프로그래밍 방식으로 레이블을 가운데 맞춤하고 싶습니다. 나는 코드를 사용했다 :

labelNote.Left = inputBox.Left + (inputBox.Width/2) - (labelNote.Width/2); 

이것은 노트의 중심을 폼의 중앙에 놓아야한다. 그러나 레이블의 내용이 변경되면 (새 레이블의 길이가 길어 지거나 짧아지면) 속성은 새 크기를 반영하여 업데이트되지 않습니다. 원본 텍스트가 포함되어 있지 않으면 중심에 있지 않습니다. 강제로 업데이트 할 수있는 방법이 있습니까? 미래의 확장 성을 위해 개체를 배치 할 때 이것이 문제가 될 것으로 예상됩니다.

나는 당신이하는 ActionListener 내에서 크기가 있으리라 믿고있어 시간

+1

WinForms, WPF 또는 ASP.NET을 사용하고 있습니까? –

+0

Winforms, 내가 말할 수있는 한. 나는 환경과 언어에 상당히 익숙하지 만 ... – KChaloux

답변

0

내가 멍청한 실수를 저질렀다는 것을 알게되었다. (디버깅을 할 때 공통적 인 주제인데, 실제로는 아주 작은 것들이 가장 오랜 시간 동안 눈에 띄지 않게되었다.)

레이블 크기 조정에 문제가 없었습니다. 문제는 레이블의 내용을 변경 한 다음 새 위치를 계산하는 함수를 호출 한 순서입니다. 먼저 위치 계산을 호출 했으므로 이전 내용을 기반으로 레이블을 가운데에 배치 할 위치를 찾았습니다. 나는 텍스트가 제대로 바뀌었기 때문에 그렇게 오래 알아 차리지 못했다. 함수가 올바른 순서로 호출되고 있음을 당연시했습니다.

그래서 의심스러운 경우 코드를 작성하는 순서를 확인하십시오. 어쨌든 도와 주셔서 감사합니다. 필자는 다른 시나리오 (예 : Graphics 클래스의 MeasureString 함수)에 적용 할 수있는 깔끔한 것을 발견했습니다.

0

주셔서 감사합니다. 특히 양식의 크기 조정 작업 수신기. 그런 다음 폼이 크기가 변경 될 때마다 호출되고 모든 코드가 호출됩니다. 그런 다음 다른 곳에서 강제로 업데이트하려면 actionListener를 호출하면됩니다.

가 된 ActionListener :

Private Sub formName_Resize(ByVal sender As Object, ByVal e As EventArgs) Handles MyBase.Resize 

통화의 ActionListener :

formName_Resize(sender, e) 
+0

나는 당신의 솔루션의 모습을 좋아하지만 몇 가지 질문이 계속됩니다. actionlistener 이벤트가 특정 작업을 수행해야합니까? 말하자면, 호출 될 때 수동으로 라벨의 크기를 설정합니까? – KChaloux

+0

네, 그 안에 뭔가 특별한 일을합니다. 여기서 레이블의 크기를 수동으로 설정할 수 있습니다. 내가 사용했을 때, 내 레이블, 필드 등의 높이, 너비 및 위치를 내 창에 설정하여 사용자가 창 모양을 바꿀 때마다 동적으로 공간 내에 맞출 수 있도록했습니다. 기본적으로 레이블, 필드 등의 크기를 변경하는 코드를 넣으십시오. – Kyra

0

글쎄, 당신은 Label.TextChanged에 이벤트를 첨부 할 수 있습니다. 솔직히 TextAlign 또는 뭔가를 변경하는 것이 더 좋을 것입니다. 코드를 통해 명시 적으로 수행하는 대신 선언적 방식으로 레이아웃을 수행하십시오. 그것은 일을 오히려 더 잘 만드는 경향이 있습니다.

저는 [TableLayoutPanel] 1 컨트롤이 비교적 쉽게 작동한다는 것을 알았습니다. 대부분의 경우 (그리고 때로는 완전한 통증).

관련 문제