Laden...

Fehler bei .ValueChanged

Erstellt von Skilllord vor 14 Jahren Letzter Beitrag vor 14 Jahren 990 Views
S
Skilllord Themenstarter:in
20 Beiträge seit 2009
vor 14 Jahren
Fehler bei .ValueChanged

Moin,

Ich habe ein kleines Übungsprogramm geschrieben, wo ich gefragt werde, wie alt ich bin, dann muss ich mein Alter in einem DateTimePicker eingeben und auf das Alter soll dann reagiert werden.

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void buttonBestätigen_Click(object sender, EventArgs e)
        {
            if (radioButtonAlkohol.Checked)
            {
                labelAlter.Text = "Bist du schon 16?";
                dateTimePicker1.Visible = true;

                if ((dateTimePicker1.ValueChanged) && ((DateTime.Today.AddYears(-16))) >= dateTimePicker1.Value)
                {                   
                    labelAusgabe.Text = "Hier hast du deinen Alk";
                }
                else
                {
                    labelAusgabe.Text = "Du bist zu jung!";
                }
            }
            else
            {
                labelAlter.Text = "Bist du schon 18?";
                dateTimePicker1.Visible = true;

                if ((dateTimePicker1.ValueChanged) && ((DateTime.Today.AddYears(-18))) >= dateTimePicker1.Value)
                {
                    labelAusgabe.Text = "Hier hast du deine Zigaretten";
                }
                else
                {
                    labelAusgabe.Text = "Du bist zu jung!";
                }
            }
        }
    }
}

Ich muss noch 'dateTimePicker1.ValueChanged' abfragen, weil die If-Anweisung sonst vom Standartdatum ausgeht, dass anfänglich im dateTimePicker vorhanden ist. Allerdings kriege ich bei .ValueChanged den Fehler

Fehler 1 Das Ereignis "System.Windows.Forms.DateTimePicker.ValueChanged" kann nur links von += oder -= verwendet werden. C:\Users\Marco\AppData\Local\Temporary Projects\WindowsFormsApplication1\Form1.cs 26 38 WindowsFormsApplication1

Ich weiß aber nicht, was mit dem "kann nur links von += oder -= verwendet werden" gemeint ist?

365 Beiträge seit 2004
vor 14 Jahren

Hallo Skilllord,

da hast du etwas falsch verstanden. ValueChanged ist keine Eigenschaft, die du abfragen kannst, sondern ein Event, das du abonnieren kannst.

Deine Entwicklungsumgebung stellt Events, Eigenschaften, Variablen etc. alle unterschiedliche da, wenn du sie dir über Intellisense anzeigen lässt. Tipp doch mal datetimepicker1, mach dann den Punkt und sieh dir die Liste an, die deine Entwicklungsumgebung für dich öffnet. ValueChanged hat ein ganz anderes Symbol! Da kannst du nix abfragen 😉

Gruß

Christoph

D
233 Beiträge seit 2008
vor 14 Jahren

Die Eigenschaften des DatePickers habe ich momentan nicht im Kopf, aber du könntest im ValueChanged einen bool setzen, der angibt, ob eine Veränderung stattgefunden hat oder das Standarddatum in einer Variable abspeichern und in deiner Abfrage mit dem aktuellen Datum vergleichen.

365 Beiträge seit 2004
vor 14 Jahren

@D-eath

Man braucht hier ValueChanged gar nicht. Man muss doch bei dem ButtonClick nur den Wert des DateTimePickers abfragen und entsprechend auswerten.

S
Skilllord Themenstarter:in
20 Beiträge seit 2009
vor 14 Jahren

Hey, danke schonmal für die Tipps! 👍

Das Datum im DateTimePicker wird aber erst nach dem ButtonClick geändert.

Ich denke mal ich setze dann einfach noch einen zweiten Button, mit dem man das neue Datum im D.T.P. bestätigen kann.

49.485 Beiträge seit 2005
vor 14 Jahren

Hallo Skilllord,

du kannst auch auf ValueChanged reagieren. Wie das geht, setzen wir als bekannt voraus. Siehe [Hinweis] Wie poste ich richtig? Punkt 1.1.1 und [FAQ] Informationen zu Events.

herbivore

4.931 Beiträge seit 2008
vor 14 Jahren

Ich denke, Skilllord hat noch ein anderes (generelleres) Problem.
Mittels


dateTimePicker1.Visible = true;

wird während des Button-Clicks der DateTimePicker erst sichtbar gemacht.

Darum kann dort auch nie ein anderer Wert als der Anfangswert stehen (da der Anwender keine Möglichkeit hat, diesen währenddessen zu ändern).

Skillord, Du mußt also dein Konzept ändern:

  • Abfrage anzeigen und DateTimePicker sichtbar machen
  • dann kann der Anwender den Wert im DateTimePicker ändern und danach dann Button betätigen
  • im Button-Click nun auf DateTimePicker.Value reagieren

(Dies sind eigentlich die Grundlagen der eventbasierten GUI-Programmierung, aber ich wollte es noch mal explizit hervorheben.)