我有几种形式的解决方案,每个可能都有TextBox的/控件和一个按钮来显示SIP(底部栏隐藏)。防止按钮获得焦点
当用户点击我的SIP按钮时,SIP已启用,但焦点现在是按钮。我希望用户点击按钮 - 要显示的SIP,但在用户单击该按钮之前焦点仍然保留在具有焦点的控件上。有谁知道如何做到这一点?谢谢。
我有几种形式的解决方案,每个可能都有TextBox的/控件和一个按钮来显示SIP(底部栏隐藏)。防止按钮获得焦点
当用户点击我的SIP按钮时,SIP已启用,但焦点现在是按钮。我希望用户点击按钮 - 要显示的SIP,但在用户单击该按钮之前焦点仍然保留在具有焦点的控件上。有谁知道如何做到这一点?谢谢。
nathan的解决方案也适用于Compact Framework或原生Windows Mobile应用程序。在文本框中的GotFocus设置一个全局变量和使用中的按钮单击事件将焦点设置到最后一个活动的文本框:
//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。
除了使用标准按钮,还可以通过从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。那就是如果你有javascript/jquery可用的话。 –