2009-10-07 2 views
1

저는 "캔버스"(패널 컨트롤 일뿐입니다)가 있으며 단추를 클릭하여 캔버스, 즉 레이블, 링크 레이블, 이미지 등에 대한 특정 컨트롤을 추가 할 수 있습니다. 추가 한 레이블의 텍스트를 편집 할 수있는 것처럼 해당 컨트롤을 편집하십시오.선택 컨트롤 받기

그러나 나는 그들이 클릭 한 컨트롤에 대해 새 글꼴과 새 색상을 선택할 수있게하려고하지만, 그렇지 않습니다. 그것이 있어야에도 불구하고 '가 t 항상

..., 일을 내가 가지고있는 코드는 다음과 같습니다

private string SelectedControl; 

내가 컨트롤을 클릭 할 때 :

private void label_Click(object sender, EventArgs e) 
{ 
    Label label = (Label)sender; 
    SelectedControl = label.Name; 
} 

사용자가 글꼴을 선택할 때 : 모든 시간을

private void setfont() 
{ 
    foreach(Control control in Canvas.Controls) 
    { 
     if(control.Name == SelectedControl) 
     { 
      control.Font = selectedfont; 
     } 
    } 
} 

그래서,이 코드는 작업을 수행하지만 그냥. 아무도 Last-Clicked 컨트롤을 어떻게 든 추적 할 수있는 다른 방법을 알고 있습니까? 나중에 참조 할 수 있습니까?

답변

2

문자열 이름을 저장하는 대신 마지막으로 클릭 한 컨트롤 자체에 대한 참조를 저장하지 않으시겠습니까?

그래서 당신의 코드가된다 : 참조를 저장하는 아주 작은 비용, 그리고 직접 참조에 액세스 할 수 있습니다

private Control SelectedControl; 

private void label_Click(object sender, EventArgs e) 
{ 
    Control ctrl = sender as Control; 
    if(ctrl != null) 
     SelectedControl = ctrl; 
} 

private void setfont() 
{ 
    SelectedControl.Font = selectedfont; 
} 

.

편집 : 참조를 컨트롤로 변경하면 배역을 수행 할 필요없이 다양한 컨트롤 유형을 참조 할 수 있습니다. 나는 코드의이 비트 할 이유 :

Control ctrl = sender as Control; 
if(ctrl != null) 
     SelectedControl = ctrl; 

그것이 안전 배역이다입니다. 어떤 이유로 송신자가 Control을 상속받지 못하면 유형 변환되지 않고 label도 null이되지만 예외는 발생하지 않습니다.

선택을 통해 변경할 수 있도록하려는 모든 컨트롤에 대해 단일 클릭 이벤트 처리기를 사용할 수 있습니다. 코드에서 컨트롤을 만들고 이벤트를 수동으로 연결하는 경우 훨씬 쉽게 작동합니다.

테두리 또는 효과를 선택하여 어떤 컨트롤이 선택되었는지 보여주는 것이 좋습니다. 이는이 일을 수행 할 수 있습니다 : 선택 해제하고 선택 일부 멋진 효과 나 국경을

if(ctrl != null) 
{ 
    Deselect(SelectedControl); //Deselects the old control 
    SelectedControl = ctrl; 
    Select(SelectedControl); //Selects the new control 
} 

.

희망이 도움이됩니다.

+0

감사합니다. AP Erebus : D가 매우 도움이되었습니다. –

+0

나는 여러 가지 유형의 컨트롤이 있기 때문에 ... 하나의 질문을 가지고 있습니다. 어떻게하면 '당신의 길을 사용하여 클릭했는지'를 알 수 있습니까? ? –

+0

나는 당신의 요구 사항에 대해 확신하지 못합니다. label_Click에 의해 처리되는 Label의 클릭 이벤트 만있는 경우 SelectedLabel로 설정된 다른 유형의 컨트롤에 문제가 없습니다. 또는 어떤 방법으로 사용자에게 어떤 라벨을 클릭했는지 보여줄 방법을 찾고 있습니까? –