对于这个问题,TextChanged事件以及keyDown,keyPress事件都不够用
因为我想要指定代码在用户对textbox有输入时被调用,这里所指的输入包括键盘输入,剪切和粘贴(可能是快捷键也可能是鼠标右键)
而不是 开发者在代码里调用了 textbox.text = "";
------解决思路----------------------
声明一个公有变量,保存文本框最新的值
增加文本框失去焦点事件,对比文本框的值和公有变量保存的是否一致,触发你的事件(文本框值改变做神马事情),然后把文本框的值赋给变量
------解决思路----------------------
mousedown, mouseup

------解决思路----------------------
一个标志变量 flag,仅在代码更改文本框前flag=true.触发textchange时
如果 flag等于true说明是代码改的,执行相应代码,紧跟着在textchange的末尾保存文本内容,并设置flag=false.
如果textchange触发时,flag=false,说明是人工改的,执行对应代码,如果要恢复文本框内容,可以直接把之前保存的内容恢复过去。
------解决思路----------------------
public class Form6
{
private bool m_bCodeMod;
private void TextBox1_TextChanged(object sender, EventArgs e)
{
// 开发者修改
if (this.m_bCodeMod)
{
Interaction.MsgBox("Code Mod: " + this.TextBox1.Text);
}
else // 用户修改
{
Interaction.MsgBox("User Mod" + this.TextBox1.Text);
}
}
private void Button1_Click(object sender, EventArgs e)
{
this.m_bCodeMod = true;
this.TextBox1.Text = "Code mod";
this.m_bCodeMod = false;
}
}
------解决思路----------------------
在textchanged里面加上条件
------解决思路----------------------
把 m_bCodeMod=false 放到 textchanged 触发代码的末尾比较好
------解决思路----------------------
如果你一定要这样的需求,那简单的标志位根本无法满足你的需求,你不能用js调用相关click事件,必须将事件中的相关处理方法声明为function,然后js和click均调用这个function,设置标志位true/false代表这个是要增加标志位还是删除标志位