Autor Beitrag
lapadula
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 142
Erhaltene Danke: 7



BeitragVerfasst: Mo 27.02.17 17:49 
Hallo, mir fällt zu folgendem Problem nichts sinnvolles ein:

Der Benutzer kann zu einem Seminar das Datum per DateTimePicker auspicken. Wenn das Datum in der Vergangenheit liegt, so soll ein Hinweis erscheinen wo gefragt wird ob man sich sicher sei.
(Ganz verhindern soll ich es nicht, falls man im nachhinein das Datum doch noch ändern möchte.)

Der Benutzer kann aber auch das Datum in der TextBox ändern, ohne den Picker auszuklappen. Dabei wird beim verlassen der Eintrag gespeichert.

Das Problem ist, wenn der Benutzer ein Datum aus der Vergangenheit auspickt und die Frage mit Ja beantwortet und dann den Picker verlässt, dann wird das onLeave Event ausgelöst, wo die selbe Frage nochmal gestellt wird.

Kann ich das onLeave Event iwie an der Stelle dann verhindern?

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
private void dtpSeminarDatum_CloseUp(object sender, EventArgs e)
        {
            try
            {
                if (dtpSeminarDatum.Value < DateTime.Now)
                {
                    MessageBox.Show("Sind Sie sicher, dass Sie ein Termin in der Vergangenheit eintragen möchten?""Hinweis", MessageBoxButtons.YesNo, MessageBoxIcon.Information);
                    if (DialogResult == DialogResult.Yes)
                    {
                        EditSeminarDatum();
                    }
                    if (DialogResult == DialogResult.No)
                    {
                        return;
                    }
                }
            }
            catch (Exception Ex)
            {
                Error.Show(Ex);
            }
        }


ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
private void dtpSeminarDatum_Leave(object sender, EventArgs e)
        {
            try
            {
                if (dtpSeminarDatum.Value < DateTime.Now)
                {
                    MessageBox.Show("Sind Sie sicher, dass Sie ein Termin in der Vergangenheit eintragen möchten?""Hinweis", MessageBoxButtons.YesNo, MessageBoxIcon.Information);
                    if (DialogResult == DialogResult.Yes)
                    {
                        EditSeminarDatum();
                    }
                }
            }
            catch (Exception Ex)
            {
                Error.Show(Ex);
            }
        }
Frühlingsrolle
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2054
Erhaltene Danke: 376

[Win NT] 5.1 x86 6.1 x64
[Delphi] 7 PE, 2006, 10.1 Starter, Lazarus - [C#] VS Exp 2012 - [Android API 15] VS Com 2015, Eclipse, AIDE - [C++] Builder 10.1
BeitragVerfasst: Mo 27.02.17 18:12 
Guten Tag lapadula,

benutz' einfach nur ein Ereignis, nämlich CloseUp.
Hierbei reicht auch nur die Abfrage nach einem DialogResult.Yes.

_________________
„Politicians are put there to give you the idea that you have freedom of choice. You don’t. You have no choice. You have owners. They own you. They own everything." (George Denis Patrick Carlin)
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4290
Erhaltene Danke: 863


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Mo 27.02.17 18:16 
Zitat:
benutz' einfach nur ein Ereignis, nämlich CloseUp.

Du meinst vermutlich nur Leave :gruebel:
Frühlingsrolle
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2054
Erhaltene Danke: 376

[Win NT] 5.1 x86 6.1 x64
[Delphi] 7 PE, 2006, 10.1 Starter, Lazarus - [C#] VS Exp 2012 - [Android API 15] VS Com 2015, Eclipse, AIDE - [C++] Builder 10.1
BeitragVerfasst: Mo 27.02.17 18:18 
Das ginge auch. :zustimm: Wäre sogar vernünftiger.

_________________
„Politicians are put there to give you the idea that you have freedom of choice. You don’t. You have no choice. You have owners. They own you. They own everything." (George Denis Patrick Carlin)
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4290
Erhaltene Danke: 863


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Mo 27.02.17 18:30 
Ich würde anstatt Leave den Validating Event vorschlagen. Da kann man dann auch gleich verhindern das der User das Control verläßt (EventArgs haben eine Cancel Property) wenn er nein sagt.
So wie du es gerade machst sieht es so aus als würde dann einfach nicht die EditSeminarDatum Methode aufgerufen im DateTimePicker bleibt aber das Datum in der Vergangenheit erhalten. Ungesehen klingt das nach Userverwirrung.
lapadula Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 142
Erhaltene Danke: 7



BeitragVerfasst: Mo 27.02.17 19:13 
Oh Man danke, das ich selber da nicht drauf gekommen bin, peinlich.

Meine Idee war halt, dass beim picken direkt gespeichert wird (in der Edit-Funktion) und beim verlassen auch, falls der Benutzer es lieber direkt in der Textbox ändern möchte.

Ich probiere eure Lösungsvorschläge aus und falls nichts mehr von mir kommt, hats funktioniert :)