私はTextBoxを持って、それは左の値を変更します。このTextBoxはXプロパティを持つクラスにバインドされています。今度は私のTextBoxのLeft値を変更すると、私のクラスのXを更新したいと思います。データバインドされたクラスプロパティの更新を強制するにはどうすればよいですか?TextBox Leftを変更するとバインドされたクラスのX値が更新されるようにするにはどうすればよいですか?
答えて
データバインディングの仕組みのため、このタイプの双方向バインディングは、コントロールが変更をアドバタイズする場合にのみ機能します。通常は*Changed
イベント経由 - つまりLeftChanged
です。そのようなイベントはないので、TextBox
をサブクラス化し、(new
)Left
を再宣言し、を追加してLocationChanged
をフックすることができません。
イベントをLocationChanged
に追加して手動で行うことはできますか?または、位置/左を設定するときにオブジェクトを手動で更新するだけですか?
using System;
using System.Windows.Forms;
namespace WindowsFormsApplication1
{
class SuperTextBox : TextBox
{
protected override void OnLocationChanged(EventArgs e)
{
base.OnLocationChanged(e);
EventHandler handler = (EventHandler)Events[LeftChangedKey];
if (handler != null) handler(this, EventArgs.Empty);
}
public event EventHandler LeftChanged
{
add { Events.AddHandler(LeftChangedKey, value); }
remove { Events.RemoveHandler(LeftChangedKey, value); }
}
public new int Left
{
get { return base.Left; }
set { base.Left = value; }
}
private static readonly object LeftChangedKey = new object();
}
class Person {
private int value;
public int Value {
get {return value;}
set {
this.value = value;
EventHandler handler = ValueChanged;
if(handler!=null)
{
handler(this, EventArgs.Empty);
}
}
}
public event EventHandler ValueChanged;
}
static class Program
{
static void Main()
{
Button btn;
TextBox txt;
Person p = new Person { Value = 10 };
using (Form form = new Form {
DataBindings = {{ "Text", p, "Value"}},
Controls = {
(txt = new SuperTextBox {
DataBindings = {{ "Left", p, "Value", false,
DataSourceUpdateMode.OnPropertyChanged}}
}),
(btn = new Button {
Text = "bump",
Dock = DockStyle.Bottom
})
}
}) {
btn.Click += delegate { txt.Left += 5; };
Application.Run(form);
}
}
}
}
はLocationChangedが発射されるときに発生する新たな左とLeftChangedイベントを追加しました。しかしそれでも動作しません。何かお見逃しですか? –
はい、バインディングはすぐに更新するように設定する必要があります(onpropertychanged) - 私は例を追加しました。 –
ありがとうございます。できます。 –
- 1. SharedPreferenceが変更されるたびにTextViewを更新するにはどうすればよいですか?
- 2. データベースが更新されたときにページを更新するにはどうすればよいですか?
- 3. WPFのリストボックスでバインドされたコンボボックスを更新するにはどうすればよいですか?
- 4. angle2でrouteParamsが変更された後、ビューを更新するにはどうすればよいですか?
- 5. MySQLの行が更新されたときにタイムスタンプ列が更新されないようにするにはどうすればよいですか?
- 6. WPF TextBoxのハイライトされたテキストのフォアグラウンドカラーを変更するにはどうすればよいですか?
- 7. TextBoxのハイライトされたテキストの色を変更するにはどうすればよいですか?
- 8. DbContextの外で変更されたエンティティを更新するにはどうすればよいですか?
- 9. 変更されたデータテーブルからSQLテーブルを更新するにはどうすればよいですか?
- 10. ボタンの変更されたデータを更新するにはどうすればよいですか?
- 11. エンティティにバインドされたバインディングソースの変更を検出するにはどうすればよいですか?
- 12. 更新された値と前回保存された値とを照合して変更をハイライトするにはどうすればよいですか?
- 13. 円の色が更新されないようにするにはどうすればよいですか?
- 14. Windowsでは、レジストリエントリが変更されないようにするにはどうすればよいですか?
- 15. 子プロパティが更新されないようにするにはどうすればよいですか?
- 16. AS3:クラスの値を設定してクラスの値が変更されないようにするにはどうすればよいですか?
- 17. コントロールのBackColorが変更されないようにするにはどうすればよいですか?
- 18. シリアル化されたクラスを変更または移動するにはどうすればよいですか?
- 19. ListViewオプションが変更されないようにするにはどうすればよいですか?
- 20. インポートされた変数の値を変更するにはどうすればよいですか?
- 21. スレッドに渡された変数を更新するにはどうすればよいですか?
- 22. 更新された新しいMCRSSプラグインをアプリにアップロードするにはどうすればよいですか?
- 23. オーバーライドされたメソッドleave()でStringEditの値を変更するにはどうすればよいですか?
- 24. 新しいセクションがスクロールされたときにアクティブナビゲーションリンクを変更するようにjqueryを設定するにはどうすればよいですか?
- 25. SQLトリガ - 更新された値を取得するにはどうすればよいですか?
- 26. オーバーライドされたメソッドの戻り値の型を変更するにはどうすればよいですか?
- 27. C#でクラス内で要素が1つだけ変更されたときにリスト全体を更新するにはどうすればよいですか?
- 28. Java:CanvasがJFrameに追加されたときにキャンバスのサイズが変更されないようにするにはどうすればよいですか?
- 29. 参照が変更されたときに元のオブジェクトを変更しないようにするにはどうすればよいですか?
- 30. Swift - ボタンがタップされたときにラベルが更新されたかどうかをテストするにはどうすればよいですか?
(コメントに返信)私はテキストボックスからderrivedまし –