如果我的表单LostFocus
,我只想清除剪贴板文本。我的意思是,如果用户使用键盘或鼠标复制某些内容,必须在LostFocus
个事件上清除它,那么如果我的表单再次获得焦点,我需要恢复我的文本。我怎样才能做到这一点?
string sValue = "";
public Form1()
{
InitializeComponent();
this.LostFocus += new EventHandler(Form1_LostFocus);
this.GotFocus += new EventHandler(Form1_GotFocus);
}
void Form1_GotFocus(object sender, EventArgs e)
{
Clipboard.SetText(sValue);
textBox1.Text = Clipboard.GetText();
}
void Form1_LostFocus(object sender, EventArgs e)
{
sValue = textBox1.Text;
Clipboard.Clear();
}
这不起作用;调用LostFocus
事件,但未调用GotFocus
。我该如何解决这个问题?
答案 0 :(得分:5)
为了给您一个有效的快速答案,而不是将事件处理程序添加到表单本身,将它们添加到TextBox
控件:
textBox1.LostFocus += new EventHandler(Form1_LostFocus);
textBox1.GotFocus += new EventHandler(Form1_GotFocus);
如果表单包含任何可见控件,则永远不会触发GotFocus
或LostFocus
事件。
但在表单级别处理此行为的推荐方法是使用:
this.Deactivate += new EventHandler(Form1_LostFocus);
this.Activated += new EventHandler(Form1_GotFocus);
或
textBox1.Leave += new EventHandler(Form1_LostFocus);
textBox1.Enter += new EventHandler(Form1_GotFocus);
微软说:
GotFocus和LostFocus事件是低级焦点事件 绑定到WM_KILLFOCUS和WM_SETFOCUS Windows消息。通常情况下, GotFocus和LostFocus事件仅在更新UICues时使用 或者在编写自定义控件时。而是进入和离开事件 应该用于除Form类之外的所有控件,它使用的是 已激活和停用活动。
当应用程序处于活动状态且具有多个表单时,活动表单 是具有输入焦点的表单。不可见的表单不可能 积极的形式。激活可见表单的最简单方法是 单击它或使用适当的键盘组合。
Form类会禁止Enter和Leave事件。该 Form类中的等效事件是Activated和Deactivate 事件
答案 1 :(得分:0)
string sVal = "";
public Form1()
{
InitializeComponent();
this.Activated += new EventHandler(Form1_GotFocus);
this.Deactivate += new EventHandler(Form1_LostFocus);
}
void Form1_LostFocus(object sender, EventArgs e)
{
sVal = Clipboard.GetText();
Clipboard.Clear();
}
void Form1_GotFocus(object sender, EventArgs e)
{
Clipboard.SetText(sVal);
}