2012-10-26 7 views
0

가능한 중복 패널 크기 조정의 WinForm :
Panel not getting focusonfocus 및

메신저 시험의 WinForm에서 패널 제어, 나는 문제에있어.

private void panel_onFocus(object sender, EventArgs e) 
    { 
     panel1.Size = new Size(panel1.Size.Width, panel1.Size.Height * panel1.Size.Height); 
    } 

    private void panel_lostFocus(object sender, EventArgs e) 
    { 
     panel1.Size = new Size(panel1.Size.Width, panel1.Size.Height/panel1.Size.Height); 
    } 

내가 초점 (버튼)을 테스트하는 폼에 다른 컨트롤을 가지고 :

내가이 2 개 i가 패널에 추가 이벤트하지만 그들 중 비 화재 있습니다.

왜 onFocus 및 lostFocus가 실행됩니까?

(내 sory 영어)

+0

음 ... 확실하지는 않지만 확실하게 초점을 맞출 수 있습니까? – musefan

+0

thx 나는 패널에 집중할 수 없다는 것을 알지 못했습니다. – samy

답변

0

lostFocus 우선 1 행의 높이를 설정되고 onGotFocus 효과적으로 아무것도 변화하지 1 1 * 1 승산을 수행한다.

+0

당신 말이 맞아요, 그리고 난 그냥 다른 코드로 해봤 어. 그러나 아직도 dosnt 일 becuse, panles는 그들에게 첫번째 아이 add'd에 초점을 준다. check Ic link – samy

1

Panel not getting focus

에서 (일반 패널에서 상속) 선택 가능한 패널

받고 있습니다 다음이보십시오. 이 클래스를 프로젝트에 추가하십시오. 그냥 namespace yourApplicaionName을 변경하십시오. 프로젝트를 컴파일하십시오. 그러면 도구 상자에 selectablePanel이 표시됩니다. 일반 패널 대신 사용할 수 있습니다. 이 패널에 집중할 수 있기를 바랍니다.

using System; 
using System.Drawing; 
using System.Windows.Forms; 

namespace yourApplicaionName 
{ 
    class selectablePanel : Panel 
    { 
     public selectablePanel() 
     { 
      this.SetStyle(ControlStyles.Selectable, true);    
      ResizeRedraw = true; 
      this.TabStop = true; 
     } 

     protected override void OnMouseDown(MouseEventArgs e) 
     { 
      this.Focus(); 
      base.OnMouseDown(e); 
     } 

     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); 
     } 

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

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

     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); 
      } 
     } 
    } 
} 
+0

이것은 주로 [Hans Passant] (http://stackoverflow.com/a/3562449/719186)에서 복사 한 것처럼 보입니다. 당신은 그에게 코드를 부여해야합니다. – LarsTech

+0

예. @ LarsTech에게 감사드립니다 ... 나는 그 링크를 잃어 버렸습니다. 그렇지 않으면 링크를 공유하는 것만으로 충분했습니다 :) – Sami