私は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. WPF TextBoxのハイライトされたテキストのフォアグラウンドカラーを変更するにはどうすればよいですか?
- 5. TextBoxのハイライトされたテキストの色を変更するにはどうすればよいですか?
- 6. DbContextの外で変更されたエンティティを更新するにはどうすればよいですか?
- 7. 更新された値と前回保存された値とを照合して変更をハイライトするにはどうすればよいですか?
- 8. 変更されたデータテーブルからSQLテーブルを更新するにはどうすればよいですか?
- 9. エンティティにバインドされたバインディングソースの変更を検出するにはどうすればよいですか?
- 10. Windowsでは、レジストリエントリが変更されないようにするにはどうすればよいですか?
- 11. AS3:クラスの値を設定してクラスの値が変更されないようにするにはどうすればよいですか?
- 12. コントロールのBackColorが変更されないようにするにはどうすればよいですか?
- 13. シリアル化されたクラスを変更または移動するにはどうすればよいですか?
- 14. ListViewオプションが変更されないようにするにはどうすればよいですか?
- 15. スレッドに渡された変数を更新するにはどうすればよいですか?
- 16. オーバーライドされたメソッドleave()でStringEditの値を変更するにはどうすればよいですか?
- 17. SQLトリガ - 更新された値を取得するにはどうすればよいですか?
- 18. 新しいセクションがスクロールされたときにアクティブナビゲーションリンクを変更するようにjqueryを設定するにはどうすればよいですか?
- 19. オーバーライドされたメソッドの戻り値の型を変更するにはどうすればよいですか?
- 20. C#でクラス内で要素が1つだけ変更されたときにリスト全体を更新するにはどうすればよいですか?
- 21. ObservableCollectionの変更された値を復元するにはどうすればよいですか?
- 22. winform C#で別のアイテムが変更されたときに、propertygridアイテムの値を更新するにはどうすればよいですか?
- 23. テーブルビューでアイテムが変更されたときを検出するにはどうすればよいですか?
- 24. TextBox値が変更された直後にDataGridViewデータソースを更新する
- 25. ページ更新後にJS変数に値を保持させるにはどうすればよいですか?
- 26. KeyValuePairの値を変更するにはどうすればよいですか?
- 27. バックグラウンドで変更されたテキストボックスのフォーカスイベントが正しい値になるように、Jqueryを強制するにはどうすればよいですか?
- 28. バインドされたプロパティが変更されたときにBinding値でリストボックスを更新する
- 29. リピーターにバインドされたすべての行のデータを表示しないようにリピーターを変更するにはどうすればよいですか?
- 30. MySQL:ランダムに選択された行の50%を更新するにはどうすればよいですか?
(コメントに返信)私はテキストボックスからderrivedまし –