[C#] Jak uzależnic własności kontrolek od jednej zmiennej

0

W klasie Form1 mam pole

private bool OK;

W czasie działania programu pole to przyjmuje wartosci true lub false. Jak teraz zrobic zeby w momencie zminy wartosci tego pola informacja na jaka wartosc zostało zmienione była "wysyłana" do dwóch buttonów i od tego zależała ich własnoc Enabled:

button1.Enabled = OK;
buton2.Enabled = OK;

0

w momencie zmiany OK przypisuj

{
   OK=true;
   button1.Enabled = OK;
   buton2.Enabled = OK;
}
{
   OK=false;
   button1.Enabled = OK;
   buton2.Enabled = OK;
}

pzdr Andrzej
1

Można by chyba jeszcze tak zakręcenie (ale nie jestem w 100% pewny czy zadziała):
tworzysz klasę OK (czy jak tam ją nazwiesz)

class Class1
    {
        private bool ok;
        private List<Button> list = new List<Button>();

        public bool Ok
        {
            get { return ok; }
            set
            {
                ok = value;
                valueChanged();
            }
        }

        public void AddButton(Button b)
        {
            list.Add(b);
        }

        private void valueChanged()
        {
            foreach (Button b in list)
            {
                b.Enabled = ok;
            }
        }
    }

i najpierw tworzysz jej obiekt, potem dodajesz buttony za pomocą addButton, a później zostaje ci tylko zmieniać zawartość zmiennej ok w klasie a przyciski powinny (powinny) się też zmieniać. W każdym razie pomysł opiera się na tym że klasy (button) są przekazywane przez referencję. Ja bym w każdym razie tak to spróbował zrobić.

0

Istnieje coś, co nazywa się DataBinding i byłoby rozwiązaniem Twojego problemu, ale akurat w przypadku pola formy nie chce mi działać (i już drugi raz powiesiłem VS2010 beta 2). Możliwe, że wymagane jest, by klasa z której bierzemy wartości implementowała jakiś interfejs albo coś w tym stylu.

Na przykład powiązanie dwóch buttonów i ich właściwości Enabled:

button1.DataBindings.Add(new Binding("Enabled", button2, "Enabled"));            
button2.Enabled = false;

Teraz, gdy zmieniam enabled drugiego buttona, "magicznie" zmienia się tez w pierwszym.

// dopisane:
prawdopodobnie żeby klasa mogła być źródłem do DataBindingu musi implementować interfejs INotifyPropertyChanged
http://msdn.microsoft.com/en-us/library/ms743695.aspx

1 użytkowników online, w tym zalogowanych: 0, gości: 1