2012-10-30 7 views
0

여러 가지 양식의 솔루션이 있으며, 각각 TextBox의/컨트롤과 SIP를 표시하는 버튼 (하단 막대는 숨김)이있을 수 있습니다.포커스가 꺼지는 것을 방지합니다.

사용자가 내 SIP 단추를 클릭하면 SIP가 활성화되지만 초점은 이제 단추가됩니다. 사용자가 버튼을 클릭하기를 원합니다 - 표시 할 SIP하지만 사용자가 버튼을 클릭하기 전에 포커스가있는 컨트롤에 포커스를 유지합니다. 누구든지이 작업을 수행하는 방법을 알고 있습니까? 감사.

+0

아마도 $ (입력) .click (함수)을 수행하고 요소 id를 last_id로 저장하십시오. 그런 다음 버튼에 대해 onblur를 수행하고 last_id에 초점을 다시 맞 춥니 다. 즉, 자바 스크립트/jquery를 사용할 수있는 경우입니다. –

답변

0

nathan의 솔루션은 Compact Framework 또는 기본 Windows Mobile 응용 프로그램에서도 작동합니다. 텍스트 상자에서의 GotFocus는 글로벌 VAR을 설정하고 마지막 활성 텍스트 상자에 포커스를 다시 설정하는 이벤트를 클릭 버튼이를 사용

편집

//global var 
    TextBox currentTB = null; 
    private void button1_Click(object sender, EventArgs e) 
    { 
     inputPanel1.Enabled = !inputPanel1.Enabled; 
     if(currentTB!=null) 
      currentTB.Focus(); 
    } 

    private void textBox1_GotFocus(object sender, EventArgs e) 
    { 
     currentTB = (TextBox)sender; 
    } 

관련

요제프 :의 서브 클래스로 해결 TextBox :

class TextBoxIM: TextBox{ 
    public static TextBox tb; 
    protected override void OnGotFocus (EventArgs e) 
    { 
     tb=this; 
     base.OnGotFocus (e); 
    } 
} 
... 
private void btnOK_Click (object sender, System.EventArgs e) 
{  
    string sName=""; 
    foreach(Control c in this.Controls){ 
     if (c.GetType()==typeof(TextBoxIM)){ 
      sName=c.Name; 
      break; //we only need one instance to get the value 
     } 
    } 
    MessageBox.Show("Last textbox='"+sName+"'"); 
    } 

그런 다음 TextBox를 배치하는 대신 TextBoxIM을 사용하십시오.

+0

나는 그것에 대해 생각하고 싶지만, 다른 텍스트 상자가 있다면, 그들은 다른 텍스트 상자의 다른 양식에 의해 multipy 그 많은 초점을해야 할 것, 그리고 그것은 추적 할 코드가 많습니다. 더 쉬운 방법이 있는지 궁금 해서요. C++에서 회상 해보니 사전에 메시지를 번역하여 모든 컨트롤에 대한 모든 메시지를 모니터링 할 수있었습니다. C#에서 비슷한 기능이 있습니까? – JLWarlow

+0

MFC 앱에서 PreTranslateMessage를 사용하여 어떻게 해결할 수 있을지 잘 모르겠습니다. 정적 static TextBox tb;와 TextBox의 하위 클래스를 만드는 방법은 무엇입니까? 서브 클래 싱 된 TextBox의 재정의 된 OnGotFocus()에 설정됩니다. – josef

1

표준 단추 대신 Control 클래스에서 파생되고 OnPaint 메서드를 재정 의하여 사용자 지정 단추를 만들 수 있습니다. 이 방법으로 만든 컨트롤은 Click 이벤트 (VS2008 netcf 2.0에서 테스트)를 처리 할 때 기본적으로 포커스를 요청하지 않습니다.

public partial class MyCustomButton : Control 
{ 
    public MyCustomButton() 
    { 
     InitializeComponent(); 
    } 

    protected override void OnPaint(PaintEventArgs pe) 
    { 
     pe.Graphics.DrawString("Show SIP", Font, new SolidBrush(ForeColor), 0, 0); 
     // Calling the base class OnPaint 
     base.OnPaint(pe); 
    } 
} 
+0

탭을 눌러 탐색하면 버튼의 초점이 멈추게됩니다. 버튼을 클릭해도 여전히 버튼에 초점을 맞 춥니 다. – JLWarlow

+0

@JLWarlow 내 편집을 참조하십시오. – yms

관련 문제