Häufig will man controls enablen/disablen oder hiden/showen, je nach Datenlage oder auch Zustand der Controls untereinander.
Kein Problem, man kann auch Control-Properties mit Databinding verknüppern.
Bes. interessant auch die beiden events der Binding-Klasse: Format und Parse.
Format wird ausgelöst, wenn die Daten ins Control geschrieben werden (zB nach einer Daten-Äderung)
Parse wird ausgelöst, wenn das Control ausgelesen wird, um die Daten zu updaten (zB nach einer Eingabe)
Bes häufig will man das eine Control enabled, das andere disabled. Einfaches Databinding würde die beiden gleichschalten, daher muß man og. Events nutzen, um den Wert grad immer umzudrehen.
Hier mal der Code:
using System;
using System.Windows.Forms;
namespace InverseBinding {
public partial class Form1 : Form {
public Form1() {
InitializeComponent();
button1.Click += (s, e) => ToggleButton1Enabled();
button2.Click += (s, e) => ToggleButton1Enabled();
//button1.Enabled und button2.Enabled invertiert verknüpfen
var bnd = button2.DataBindings.Add("Enabled", button1, "Enabled");
bnd.Format += bnd_Invert;
bnd.Parse += bnd_Invert;
//spaßeshalber noch ein panel dran hängen
panel1.DataBindings.Add(new Binding("Enabled", button2, "Enabled"));
//button1.Enabled auch mit einer Textbox verknüpfen, aber mit benutzerdefiniertem
//Text für true/false
var bnd2 = textBox1.DataBindings.Add("Text", button1, "Enabled");
bnd2.Format += new ConvertEventHandler(bnd2_Format);
}
void bnd_Invert(object sender, ConvertEventArgs e) {
// invertiert den bool, sowohl beim parsen (Control auslesen)
// als auch beim formatten (Control befüllen)
e.Value = !(bool)e.Value;
}
void bnd2_Format(object sender, ConvertEventArgs e) {
// ersetzt die Konvertierung des standard-TypeConverters durch eine benutzerdefinierte
// beachte: da das parsen hier nicht implementiert ist, muß man "True"/"False" reinschreiben,
// um wirkung zu erzielen
e.Value = ((bool)e.Value) ? "eher schon" : "tendenziell eher weniger";
}
private void ToggleButton1Enabled() {
button1.Enabled = !button1.Enabled;
}
}
}
Der frühe Apfel fängt den Wurm.