2017-12-08 7 views
0

Windows Form Label에서 상속 된 사용자 지정 레이블이있는 winform이 있습니다. 사용자가이 라벨을 수정하고 값을 변경하도록 허용해야합니다.레이블 편집 및 텍스트 변경 허용 - C# winform

우리는 readonly 속성을 false로 변경하여 사용자가 편집 할 수 있도록 텍스트 상자를 사용할 수 있음을 알고 있습니다.

하지만 내가 라벨을 사용하는 이유는 텍스트의 방향을 바꾸고 맞춤 라벨을 변경해야 할 수도 있기 때문입니다.

제 궁금한 점은, 사용자가 일반 Winform Label을 편집하도록 허용 할 수 있습니까?

게시물 : Editable Label Controls은 해결책이 아닙니다. 그것도 받아 들인 답이 없습니다.

+0

레이블은 입력 용으로 사용되지 않습니다. 텍스트 상자를 사용하고 텍스트 필드를 레이블 텍스트에 바인딩 할 수 있습니다. –

+0

레이블에 편집 기능을 수행하기 위해 컨텍스트 메모를 구현하려고합니다. 그런 다음 텍스트 상자를 팝업하여 레이블에 지정할 수 있습니까? – blackfury

+0

'single/double click'에서'label'을'textbox'로 변경할 수 있습니다. – Taleeb

답변

3

이것은 최선의 방법은 아니지만 여전히 선택 사항입니다. 양식 KeyPreview을 true로 설정하고 KeyDown 키 이벤트 핸들러를 양식에 추가하고 Click 이벤트 핸들러를 라벨에 추가하십시오. 클릭 이벤트 핸들러에서 bool을 true로 설정하십시오. keydown 핸들러 내부에서 bool이 true 인 경우 레이블 Text 속성에 눌린 키를 추가하는 if 문을 사용합니다. 그러면 사용자가 레이블을 클릭 한 다음 입력 한 내용이 레이블로 이동합니다. 내 끔찍한 설명

예제 코드 :

public static Form f1 = new Form(); 
public static Label l1 = new Label(); 
public static bool isLabelClicked = false; 

그런 다음 어떤 방법이를 넣어 양식의 속성을 설정하고 그 개체를합니다. 거짓 이후 그래서 didn를

public static void l1_Clicked(object sender, EventArgs e) 
{ 
    isLabelClicked = true; 
} 

public static void f1_keydown(object sender, KeyEventArgs e) 
{ 
    if (isLabelClicked == true) 
    { 
     if (e.KeyCode == Keys.A) 
     { 
      l1.Text += "a"; 
     } 
     else if (e.KeyCode == Keys.B) 
     { 
      //Etc. For each key 
     } 
    } 
} 

그것은 가장 효율적인 방법은 그것을 할 수 없습니다 그리고 당신은 부울을 만들 수있는 방법을 설정해야 할 것

f1.KeyPreview = true; 
l1.Click += new EventHandler (l1_Clicked); 
f1.KeyDown += new KeyEventHandler (f1_keydown); 

그런 다음 '프로젝트에서 이러한 두 가지 방법이 타이핑 할 때마다 레이블 값을 계속 변경해도 효과가 있습니다.

자이언트 if, else if 블록을 작성하지 않고 각각의 다른 키를 처리하는 더 쉬운 방법이 있습니다. "," "Oemcomma"가 될 수 있기 때문에 KeyCode를 변환하는 것만 큼 피곤할 수 있습니다. 귀하의 코딩과 행운을 빌어 요 :)