TextBox 与 RichTextBox 的修改属性(这是一个错误吗?)

问题描述 投票:0回答:1

在 WinForms 中,TextBoxRichTextBox 都继承了 TextBoxBase 类,这意味着 Modified 属性应该具有相同的作用。然而,他们没有。

我是怎么找到这个的?让我解释一下上下文。 当

TextChanged
事件触发时(也就是用户输入内容时),我必须检查 TextBox 的值,例如,如果我找到字母“A”,我必须调用另一个函数。 但是,有时我还必须以编程方式更改文本框的文本(又名,
myTxtBox.Text = "ABC";
),并且(正如您可能已经猜到的那样)当我设置的文本也包含字母“A”时,我不想调用其他函数.

如何解决这个问题?我认为有两个选择:

  1. 使用像这个答案中那样的布尔值。
  2. 使用 Modified 属性,我发现这是最好的选择,所以我像这样使用它(在
    TextChanged
    事件中):

if (sender is not null && !((TextBox)sender).Modified) { return; }

但是当我在 RichTextBox 上实现此操作时,一切都会失败,这对我来说很奇怪,因为当涉及 Modified 属性时,两者应该工作相同。 无论文本是由用户还是代码更改,

Modified
属性始终设置为
true

我的问题是,我刚刚发现了一个错误还是我很蠢?

c# winforms textbox richtextbox
1个回答
1
投票

您可以创建一个扩展方法,例如:

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; }
© www.soinside.com 2019 - 2024. All rights reserved.