c# のプロパティがどのように機能するかを確認する必要があります。
Sharplab.io で単純なクラスを逆コンパイルすると、
public class C {
public int foo
{get;set;}
}
コンパイルが常にバッキング フィールドと getter および setter メソッドを生成することがわかります。
したがって、イベントをトリガーしたくない場合は、イベントがトリガーされる可能性が最も高いため、これらのメソッドをバイパスする必要があります。
これは、通常は非常に簡単に実行できるリフレクションで実行できるはずです。BUT Textbox には、その Text-Property に簡単にアクセスできるバッキング フィールドがないようです。ほとんどの場合、プライベート StringSource フィールドによって設定されます。これは、内部型 StringSource からのものです。そのため、まず型を取得する必要があります。コンストラクターへの参照を取得し、これを呼び出してプライベート フィールドを設定します。
これは私がどこまで来たかです:
private int number = 0;
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
number++;
this.textBox1.Text = number.ToString();
}
private void button2_Click(object sender, EventArgs e)
{
number++;
Type cTorType = typeof(string[]);
string[] cTorParams = new string[] { number.ToString() };
Type type = this.textBox1.GetType().GetRuntimeFields().ElementAt(11).FieldType;
ConstructorInfo ctor = type.GetConstructor(new[] { cTorType });
object stringSourceInstance = ctor.Invoke(new[] { cTorParams });
this.textBox1.GetType().GetRuntimeFields().ElementAt(11).SetValue(this.textBox1, stringSourceInstance);
}
private void textBox1_TextChanged(object sender, EventArgs e)
{
MessageBox.Show("Changed!");
}
セッターメソッドのトリガーをバイパスするために変更できるフィールドまたはプロパティがどこかにある必要があるため、リフレクションをもう少し掘り下げて、 typeof(TextBox).GetFields / .GetProperties を使用して TextBox クラスで何が見つかるかを確認することをお勧めします行事。
お役に立てれば。