여러 가지 양식의 솔루션이 있으며, 각각 TextBox의/컨트롤과 SIP를 표시하는 버튼 (하단 막대는 숨김)이있을 수 있습니다.포커스가 꺼지는 것을 방지합니다.
사용자가 내 SIP 단추를 클릭하면 SIP가 활성화되지만 초점은 이제 단추가됩니다. 사용자가 버튼을 클릭하기를 원합니다 - 표시 할 SIP하지만 사용자가 버튼을 클릭하기 전에 포커스가있는 컨트롤에 포커스를 유지합니다. 누구든지이 작업을 수행하는 방법을 알고 있습니까? 감사.
여러 가지 양식의 솔루션이 있으며, 각각 TextBox의/컨트롤과 SIP를 표시하는 버튼 (하단 막대는 숨김)이있을 수 있습니다.포커스가 꺼지는 것을 방지합니다.
사용자가 내 SIP 단추를 클릭하면 SIP가 활성화되지만 초점은 이제 단추가됩니다. 사용자가 버튼을 클릭하기를 원합니다 - 표시 할 SIP하지만 사용자가 버튼을 클릭하기 전에 포커스가있는 컨트롤에 포커스를 유지합니다. 누구든지이 작업을 수행하는 방법을 알고 있습니까? 감사.
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을 사용하십시오.
나는 그것에 대해 생각하고 싶지만, 다른 텍스트 상자가 있다면, 그들은 다른 텍스트 상자의 다른 양식에 의해 multipy 그 많은 초점을해야 할 것, 그리고 그것은 추적 할 코드가 많습니다. 더 쉬운 방법이 있는지 궁금 해서요. C++에서 회상 해보니 사전에 메시지를 번역하여 모든 컨트롤에 대한 모든 메시지를 모니터링 할 수있었습니다. C#에서 비슷한 기능이 있습니까? – JLWarlow
MFC 앱에서 PreTranslateMessage를 사용하여 어떻게 해결할 수 있을지 잘 모르겠습니다. 정적 static TextBox tb;와 TextBox의 하위 클래스를 만드는 방법은 무엇입니까? 서브 클래 싱 된 TextBox의 재정의 된 OnGotFocus()에 설정됩니다. – josef
표준 단추 대신 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);
}
}
아마도 $ (입력) .click (함수)을 수행하고 요소 id를 last_id로 저장하십시오. 그런 다음 버튼에 대해 onblur를 수행하고 last_id에 초점을 다시 맞 춥니 다. 즉, 자바 스크립트/jquery를 사용할 수있는 경우입니다. –