2016-09-13 9 views
2

flowlayoutPanel에 동적으로 추가하는 50 개의 UserControl이 있습니다. 사용자 정의 컨트롤에 포커스를 설정해야하지만 작동하지 않습니다. 많은 것을 검색해 왔지만 이해하는 예제를 찾을 수 없습니다.어떻게 포커스를 Usercontrol에 설정합니까?

내가 찾을 수있는 유일한 예는이 Setting Focus to a .NET UserControl...?

내가 userCtrl.Focus()를 사용하려고입니다 그러나 그것은 작동하지 않았다. 내가 읽고있는 것처럼 usercontrol은 포커스를 갖고 싶지 않습니다.

+0

'UserControls'에는 다른 컨트롤이 포함되어 있습니까? 그렇다면 그 중 하나에 집중할 수 있습니다. – adv12

+0

this.ActiveControl = YourControl; –

+0

다른 사람이 언급 한대로 ActiveControl을 설정하십시오. 또한, 그들은 당신의 UserControls이야! public FocusOnMe() 메서드를 제공하고 포커스를 설정할 위치를 코딩하면 myUserControl.FocusOnMe()를 사용할 수 있습니다. –

답변

0

당신은 Control.Select()를 사용 UserControl에 초점을 포함한 모든 컨트롤을 활성화하려면 ActiveControl 재산권

this.ActiveControl = myUserControl; 
1

를 사용하여 컨트롤에 포커스를 설정할 수 있습니다.

textBox에 대해 이렇게하면 select가 입력 포커스를 얻는 것을 확인합니다.

사용자가 선택한 (포커스가있는) 사용자 정의 컨트롤을 사용하여 모양을 변경하거나 컨트롤을 선택하려는 경우가 있습니다.

public partial class UserControl1 : UserControl 
{ 
    public UserControl1() 
    { 
     InitializeComponent(); 
    } 

    private void InitializeComponent() 
    { 
     this.checkBox1 = new System.Windows.Forms.CheckBox(); 
     ... 
     this.Enter += new System.EventHandler(this.OnEnterFocus); 
     this.Leave += new System.EventHandler(this.OnLeaveFocus); 
    } 

    private void OnEnterFocus(object sender, EventArgs e) 
    { 
     this.checkBox1.Checked = true; 
    } 

    private void OnLeaveFocus(object sender, EventArgs e) 
    { 
     this.checkBox1.Checked = false; 
    } 
} 
이렇게하려면 사용자 컨트롤 클래스는 내가 사용자 컨트롤이 선택 될 때마다 확인되는 체크 박스와 사용자 정의 컨트롤을 만든

이벤트 Control.Enter 및 Control.Leave에 가입한다

나는 버튼으로 형성하고, 버튼을 클릭 할 때 호출되는 이벤트 핸들러를 가지고 : 버튼 내가 확인란이 선택되어 있기 때문에 사용자 컨트롤에 포커스를 얻을 것을 볼 클릭 이제 때마다

private void OnButton1Clicked(object sender, EventArgs e) 
{ 
    this.userControl1.Select(); 
} 

다른 곳을 클릭 할 때마다 체크 박스가 나타납니다. 선택하지 않았다.

1

초점이 맞지 않았다는 것을 자세히 설명하지는 않았지만 초점은 여러 측면을 통상적으로가집니다.

1. 명시

가 제어 Focus() 메소드를 호출하면 포커싱 용기 형태 ActiveControl을 설정하는 것과 동일하다. CanFocus이 true를 반환하면 (컨트롤과 모든 부모가 표시되고 활성화되어 있음) 작동합니다. 그러나 간접적 인 힌트를 제외하고 시각적 인 피드백은 없습니다. 원래 포커스 된 컨트롤 (단추 또는 텍스트 상자)이 포커스를 잃습니다. 대신 UserControlControl에서 직접 파생 경우 포커스 된 상태 변경에 다시 그리기를 강제로 다음과 같은 두 가지 방법을 오버라이드 (override),

protected override void OnPaintBackground(PaintEventArgs e) 
{ 
    e.Graphics.Clear(Focused ? SystemColors.Highlight : SystemColors.Control); 
} 

:

는 일부 사용자 지정 페인트를 사용 할 수 있습니다 포커스 상태를 시각화하기 :

protected override void OnGotFocus(EventArgs e) 
{ 
    Invalidate(); 
    base.OnGotFocus(e); 
} 

protected override void OnLostFocus(EventArgs e) 
{ 
    base.OnLostFocus(e); 
    Invalidate(); 
} 

2.도

SetStyle(ControlStyles.Selectable, true); 

대신 UserControlControl에서 직접 파생 경우, OnMouseDown를 오버라이드 (override) : 마우스

에 의해 집중하면 컨트롤이 생성자에이 줄을 추가 클릭하여 포커스를받을

protected override void OnMouseDown(MouseEventArgs e) 
{ 
    if (!Focused) 
     Focus(); 
    base.OnMouseDown(e); 
} 

3. 키보드로 초점 맞추기

TAB 키로 포커스를 받으려면 TabStop 속성을 true으로 설정하고 TabOrder 속성을 조정하십시오.

0

예을 textBox1에 초점을 :

textBox1.Select(); 
0

당신은 사용자 정의 컨트롤의 탭 인덱스를 시도 할 수 있습니다. 탭 인덱스를 1로 설정하면 프로그램이 시작되면 초점이 맞춰집니다.

관련 문제