在 WinForms 中,TextBox 和 RichTextBox 都继承了 TextBoxBase 类,这意味着 Modified 属性应该具有相同的作用。然而,他们没有。
我是怎么找到这个的?让我解释一下上下文。 当
TextChanged
事件触发时(也就是用户输入内容时),我必须检查 TextBox 的值,例如,如果我找到字母“A”,我必须调用另一个函数。
但是,有时我还必须以编程方式更改文本框的文本(又名,myTxtBox.Text = "ABC";
),并且(正如您可能已经猜到的那样)当我设置的文本也包含字母“A”时,我不想调用其他函数.
如何解决这个问题?我认为有两个选择:
if (sender is not null && !((TextBox)sender).Modified) { return; }
但是当我在 RichTextBox 上实现此操作时,一切都会失败,这对我来说很奇怪,因为当涉及 Modified 属性时,两者应该工作相同。 无论文本是由用户还是代码更改,
Modified
属性始终设置为true
。
我的问题是,我刚刚发现了一个错误还是我很蠢?
您可以创建一个扩展方法,例如:
public static void SetText(this RichTextBox rtb, string text)
{
rtb.Modified = true;
rtb.Text = text;
rtb.Modified = false;
}
然后将其与您的 TextBox 解决方案结合使用:
if (sender is not null && !((TextBox)sender).Modified) { return; }