C# 패널 사용자 컨트롤 개선: 포커스 문제 해결
C#을 사용하는 그래픽 프로그램에서 키보드 입력이 필요한 패널에서는 종종 문제가 발생합니다. 일반적인 문제는 패널이 포커스를 얻을 수 없어 KeyUp/KeyDown/KeyPress 및 GotFocus/LostFocus 이벤트를 트리거하지 못하는 것입니다.
Panel의 기능을 향상시키기 위한 보다 우아한 솔루션은 다음과 같이 Panel 기본 클래스를 수정하는 것입니다.
선택 사항 활성화:
<code class="language-csharp"> SetStyle(ControlStyles.Selectable, true); TabStop = true;</code>
마우스를 클릭하면 강제로 초점이 맞춰집니다.
<code class="language-csharp"> protected override void OnMouseDown(MouseEventArgs e) { this.Focus(); base.OnMouseDown(e); }</code>
입력 키 다시 쓰기 처리:
<code class="language-csharp"> protected override bool IsInputKey(Keys keyData) { if (keyData == Keys.Up || keyData == Keys.Down) return true; if (keyData == Keys.Left || keyData == Keys.Right) return true; return base.IsInputKey(keyData); }</code>
맞춤 초점 시각 효과:
<code class="language-csharp"> protected override void OnEnter(EventArgs e) { this.Invalidate(); base.OnEnter(e); } protected override void OnLeave(EventArgs e) { this.Invalidate(); base.OnLeave(e); }</code>
초점 직사각형 표시:
<code class="language-csharp"> protected override void OnPaint(PaintEventArgs pe) { base.OnPaint(pe); if (this.Focused) { var rc = this.ClientRectangle; rc.Inflate(-2, -2); ControlPaint.DrawFocusRectangle(pe.Graphics, rc); } }</code>
이러한 수정을 통해 패널을 선택하고 키보드 입력을 받을 수 있습니다. 제공된 코드는 클릭 시 패널이 포커스를 받고 위쪽, 아래쪽, 왼쪽 및 오른쪽 화살표 키에 응답하도록 보장합니다. 또한 패널이 포커스를 받으면 패널 주위에 포커스 직사각형이 표시되어 사용자 경험이 향상됩니다.
위 내용은 C# 패널이 키보드 입력을 수신하고 초점 사각형을 표시하도록 하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!