111,095
社区成员




using System;
using System.ComponentModel;
using System.Windows.Forms;
namespace MyControls
{
[ToolboxItem(true)]
public class STextBox : TextBox
{
public string _oldText;
public event Action RealTextChanged;
protected override void OnGotFocus(EventArgs e)
{
base.OnGotFocus(e);
_oldText = Text;
}
protected override void OnLostFocus(EventArgs e)
{
base.OnLostFocus(e);
if (Text != _oldText)
{
RealTextChanged?.Invoke();
}
}
}
}
这种方式有明显缺陷 假设焦点在a 改变了a的值 切换到b 假设在处理逻辑中使用了messagebox 则 b会先失去焦点 引发b的事件
private void txtName_MouseLeave(object sender, EventArgs e)
{
string name = this.txtName.Text.Trim();
//判断用户输入不为空,并且新的输入值不等于定义的全局变量
if (name != string.Empty && !name.Equals(global_str))
{
//保存新的变量值
global_str = name;
//这里执行输入改变后,你要执行的代码
}
}
[/quote]
感谢你的回复,这个思路是可以,但是我有很多这样的控件,这样写会麻烦死了
private void txtName_MouseLeave(object sender, EventArgs e)
{
string name = this.txtName.Text.Trim();
//判断用户输入不为空,并且新的输入值不等于定义的全局变量
if (name != string.Empty && !name.Equals(global_str))
{
//保存新的变量值
global_str = name;
//这里执行输入改变后,你要执行的代码
}
}
private void txtName_MouseLeave(object sender, EventArgs e)
{
string name = this.txtName.Text.Trim();
//判断用户输入不为空,并且新的输入值不等于定义的全局变量
if (name != string.Empty && !name.Equals(global_str))
{
//这里执行输入改变后,你要执行的代码
}
}