문제

Vista에서는 Segoe UI 9pt를, Windows XP 등에서는 Tahoma 8pt를 사용하고 싶습니다.(실제로 저는 두 가지 모두에서 Segoe UI를 사용하고 싶지만 사용자는 아마도 이를 설치하지 않았을 것입니다.) 그러나 이것들은 상당히 다르기 때문에 제 양식의 레이아웃을 실제로 망쳐 놓습니다.그래서...이것을 처리할 좋은 방법이 있나요?

예:나는 Label, 중간에 빈 공간이 있고 여기에 NumericUpDown 제어.Segoe UI를 사용하면 NumericUpDown Tahoma를 사용할 때와 비교하면 공백에서 왼쪽으로 약 5픽셀 정도 떨어져 있습니다.이것은 고통입니다.여기서 무엇을 해야할지 모르겠습니다.

가장 구체적으로 내 질문은 다음과 같습니다.내 빈 공간 중앙에 컨트롤을 어떻게 배치할 수 있나요? Labels (또는 CheckBox예 등)?가장 일반적으로:Windows Forms에서 다양한 글꼴을 처리하는 좋은 방법이 있습니까?

편집하다:나는 사람들이 그 질문을 이해하지 못했다고 생각합니다.나는 방법을 안다 글꼴 변경 OS 기반.난 그냥 어떻게 해야할지 모르겠어 레이아웃 문제를 다루다 그렇게 함으로써 발생하는 것입니다.

답장하다 아즈리안, Quick_dry:좋아요, 여러분은 질문을 이해했습니다.이 문제를 해결하기 위한 더 나은 방법을 더 자세히 탐구하고 싶지만 MeasureString이 작동할 수도 있을 것 같습니다.

컨트롤을 분할할 때 발생하는 문제는 다음과 같은 경우에 가장 분명하게 나타납니다. CheckBox.거기에서 사용자가 CheckBox의 "두 번째 절반"(별도의 부분)을 클릭하면 Label 통제하는 것 같아요) CheckBox 상태가 바뀌지 않습니다.

도움이 되었습니까?

해결책

하나의 컨트롤을 다른 컨트롤 안에 배치해야 한다는 것은 이상합니다.업스트림 문제를 잘못 해결하고 있을 수도 있습니다.Windows Forms TableLayout 패널 사이에 업다운을 사용하여 레이블을 두 개의 레이블로 분할할 수 있습니까?

글꼴 크기를 기준으로 위치를 지정하는 것이 필수적인 경우 다음을 사용할 수 있습니다. 그래픽.측정 문자열("업다운 전 문자열", myLabel.Font)

당신이 추구하는 것이 글꼴에 따른 제어 위치 지정이라면 아마도 질문의 제목을 바꿔야 할 것입니다.


[편집] 레이블의 "후반부" 부분의 클릭 이벤트를 처리하고 해당 이벤트의 확인란 상태를 변경할 수 있습니다.하지만 모든 것이 해킹처럼 보입니다.이 이상한 컨트롤 레이아웃으로 해결되는 문제는 무엇입니까?라벨 중간에 업다운이 필요한 이유는 무엇입니까?

다른 팁

두 번째로 한 줄 인라인 컨트롤에 TableLayoutPanel을 사용하는 방법입니다.

나는 일반적으로 디자이너에서 각 열과 첫 번째 행을 AutoSize로 설정하고 각 하위 컨트롤의 Dock 속성을 Fill로 설정합니다.그러면 가로 레이아웃이 올바르게 표시됩니다.레이블/텍스트 상자 사이에 텍스트 줄을 만들려면 TextAlign 속성을 MiddleLeft로 설정합니다.

텍스트가 다음 줄로 넘어가면 쉬운 해결책이 없습니다.Graphics.MeasureString/TextRenderer.MeasureText 및 멋진 래핑 논리를 사용하는 것이 가장 좋습니다.

먼저, 현재 사용하고 있는 Windows 버전을 확인할 수 있습니다. 운영 체제.플랫폼 시스템 라이브러리의 속성입니다.

둘째, 리소스 파일에 글꼴 설정을 입력하고 특정 조건(예: 운영 체제 버전)에 따라 사용할 리소스 파일을 결정할 수 있습니다.

하지만 개인적으로는 사용자가 글꼴을 결정하도록 하는 것이 좋을 것이라고 생각합니다. 그들 당신이 사용하기를 원하는 글꼴과는 반대되는 것을 선호합니다.

마지막으로 다음을 살펴보는 것이 좋습니다. WPF 이는 해결하기 위해 설계된 문제 공간 중 하나이기 때문입니다.

컨트롤 배치에 문제가 있습니까?즉.글꼴 X와 Y가 OS A와 B에서 작동하고 해당 시스템에서 사용 중인 텍스트로 원하는 레이아웃을 제공한다는 것을 알고 계십니까?

MeasureString 메서드는 특정 글꼴에 묶이지 않는 방식으로 레이아웃을 작업하는 데 도움이 될 수 있습니다.

float textWidth = 그래픽.MeasureString(someString, someFont).Width;

(텍스트 정렬을 변경하면 효과가 있을까요?나도 문제를 오해하고 있을지도 모른다)

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top