Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何有效地确定用户是否实际生成了C语言输入#_C#_Textbox_Textchanged - Fatal编程技术网

C# 如何有效地确定用户是否实际生成了C语言输入#

C# 如何有效地确定用户是否实际生成了C语言输入#,c#,textbox,textchanged,C#,Textbox,Textchanged,正在使用文本编辑器 我试图弄清楚,在键盘事件发生后,用户是否真的对文本框进行了任何更改。很明显,如果他们按a B C这样的标准键,它会启动,但我更感兴趣的是,除了列举所有可能的非输入选项外,是否还有其他方法 我会注意到,我意识到文本框的状态可以在之前和之后进行比较,但是如果它是一个大文档的话,这似乎是对内存和CPU时间的糟糕使用。另外,我将Modified属性用于另一个目的,因为它只在更改时触发,所以这也不是一个选项,因为它通常处于true状态 我已经考虑过枚举方面的问题,但这似乎也是低效的,因

正在使用文本编辑器

我试图弄清楚,在键盘事件发生后,用户是否真的对文本框进行了任何更改。很明显,如果他们按a B C这样的标准键,它会启动,但我更感兴趣的是,除了列举所有可能的非输入选项外,是否还有其他方法

我会注意到,我意识到文本框的状态可以在之前和之后进行比较,但是如果它是一个大文档的话,这似乎是对内存和CPU时间的糟糕使用。另外,我将
Modified
属性用于另一个目的,因为它只在更改时触发,所以这也不是一个选项,因为它通常处于
true
状态

我已经考虑过枚举方面的问题,但这似乎也是低效的,因为我不仅要确保每个非输入选项都存在,还要检查所有异常。我想到的一个例子是:

如果按下Ctrl,我不想做任何事情,除非我有Ctrl+V或Ctrl+X

但是,如果剪贴板中没有任何内容,则Ctrl+V不应执行任何操作,如果未选择任何内容,则Ctrl+X不应执行任何操作

我确信还有更多的例外,我现在没有想到

至于Modified属性,当它发生变化时,我将使用它来修改寡妇标题,并根据其状态添加/不添加星号。因此,如果我重置属性,它将删除星号。

在著名的方法中,我只需问一下就可以解决这个问题。如果我错过了一个更有效的选择,请告诉我

第一个也是最简单的选择是使用
TextChanged
事件,我通过在帖子中添加标签了解到了这一点

如果出于任何原因,这对未来的读者不起作用,那么使用
ModifiedChanged
事件将是次好的选择

简单地说,在我的情况下,星号只有在文档保存时才会消失。通过设置标志,我可以使用
if
语句确定是否需要删除它,然后在该点重置标志。大概是这样的:

void saved(){
    // ...
    saved = true;
}

// ...
if(saved){
    removeAsterisk();
    saved = false;
}
// ...

这些似乎是最好的选择,既不需要很长的代码,也不需要检查100k字符来耗费时间。

对内容进行散列怎么样?@SteveB可以随意添加该方法。尽管我认为由于.NET已经触发了
TextChanged
事件,这是最快的方法,因为它所做的一切都是添加函数调用和函数中的任何代码。