Καλώς ορίσατε στο dotNETZone.gr - Σύνδεση | Εγγραφή | Βοήθεια
σε

 

Αρχική σελίδα Ιστολόγια Συζητήσεις Εκθέσεις Φωτογραφιών Αρχειοθήκες

datetimepicker σε visual studio, C#

Îåêßíçóå áðü ôï ìÝëïò DUDE!!. Τελευταία δημοσίευση από το μέλος Παναγιώτης Καναβός στις 25-05-2009, 15:49. Υπάρχουν 8 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  24-05-2009, 20:07 50920

    datetimepicker σε visual studio, C#

    σε μία windows form έχω ένα αντικείμενο datetimepicker το οποίο έχει επιλογή να δείχνει την σημερινή ημερομηνία ώρα και μέρα. Θέλω να το προγραμματίσω ώστε εάν η ημέρα είναι Σάββατο η κυριακή, αυτό αυτόματα να δείχνει την ημερομηνία της τελευταίας παρασκευής. υπάρχει κάποιος ενδεδειγμένος τρόπος για αυτό???

    ευχαριστώ
  •  25-05-2009, 01:07 50923 σε απάντηση της 50920

    Απ: datetimepicker σε visual studio, C#


    φίλε μου είσα θεούλης....χαχαχα

    ρε φίλε, το καλύτερο θα ήτανε να κάνεις μια εφαρμογή που όταν πάει η ημέρα "δευτέρα, τρίτη, τετάρτη,πέμπτη,παρασκευή" να δείχνει σάββατο και κυριακή......

    αυτό που πας να κάνεις εσύ είναι σαν το μαρτύριο του Σισύφου.....χαχαχα

    τώρα που το σκέφτομαι αυτό θα ήτανε ένα πολύ καλό μαρτύριο για δημόσιους υπάλληλους.χαχαχα

    λοιπόν,

    δεν τέσταρα πολύ τον κώδικα, ούτε είμαι σίγουρος ότι κάνει αυτό που θες ακριβώς... αλλά είναι μια πολύ καλή αρχή. σε προτρέπω να δεις προσεκτικά τα members (properties & methods) του

     DateTimePicker class

    δες εδώ

    http://msdn.microsoft.com/en-us/library/system.windows.forms.datetimepicker.aspx

    τώρα,

    στο datetimepicker control, που έχεις στην φόρμα, (αφήνω το default όνομα) κάνε διπλό κλικ στο control και στο default event handler (dateTimePicker1_ValueChanged)

    γράψε τον κώδικα παρακάτω. όταν θα διαλέγεις μια ημερομηνία που είναι σάββατο ή κυριακή θα πάει στην παρασκευή την προηγούμενη.


    private void dateTimePicker1_ValueChanged(object sender, EventArgs e)
            {
                changefridaydate();
            }


    επίσης στο form_Load event  βάλε

      private void Form1_Load(object sender, EventArgs e)
            {
              

                changefridaydate();
               
            }


    ακολουθεί η subroutine που κάνει όλη την δουλειά...


        private void changefridaydate()
            {
                string mydate;

                mydate = dateTimePicker1.Value.DayOfWeek.ToString();

                if (mydate == "Saturday")
                {

                   
                    dateTimePicker1.Value = dateTimePicker1.Value.Subtract(TimeSpan.FromDays(1));


                }

                if (mydate == "Sunday")
                {

                   
                    dateTimePicker1.Value = dateTimePicker1.Value.Subtract(TimeSpan.FromDays(2));

                  

                }
            }

    Νικόλαος Καντζέλης
    BSc, MSc, MCAS, MCPD, MCITP, MCTS,MCP, MCT
    http://www.nksolutions.gr
    http://dotnetstories.wordpress.com
    http://weblogs.asp.net/dotnetstories
    http://forum.dotnetnuke.gr
  •  25-05-2009, 01:35 50924 σε απάντηση της 50923

    Απ: datetimepicker σε visual studio, C#

    Τέλεια, είσαι και ο πρώτος. 2 μέρες προσπαθώ να το κάνω με τον συγκεκριμένο τρόπο. είναι λίγο μαρτύριο έχεισ δίκιο αλλα στο συγκεκριμένο project που κάνω είναι πιο λειτουργικός τρόπος. thanks.SmileSmileSmile
  •  25-05-2009, 10:38 50933 σε απάντηση της 50924

    Απ: datetimepicker σε visual studio, C#

    Ισος πιο κομψά :

     if(dateTimePicker1.Value.DayOfWeek == DayOfWeek.Saturday)
                        dateTimePicker1.Value = dateTimePicker1.Value.AddDays(-1);
  •  25-05-2009, 11:31 50937 σε απάντηση της 50933

    Απ: datetimepicker σε visual studio, C#

    Και λίγο πιο περίτεχνα

    Dim daysFromMonday As Integer() = New Integer() {6, 0, 1, 2, 3, 4, 5}

    Const FRIDAY As Integer = 4

    Private Sub DateTimePicker1_ValueChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles DateTimePicker1.ValueChanged

       Dim dayOfWeek = daysFromMonday(DateTimePicker1.Value.DayOfWeek)

       If (dayOfWeek > FRIDAY) Then

          DateTimePicker1.Value = DateTimePicker1.Value.AddDays(FRIDAY - dayOfWeek)

       End If  

    End Sub

     

    Θέλω να ελέγχω για ΣΚ με μία μόνο πράξη, οπότε θα ήθελα να πω dayOfWeek>DayOfWeek.Friday. Αυτό δεν γίνεται επειδή το DayOfWeek enumeration ξεκινάει από 0 για Κυριακή και καταλήγει στο 6 για το Σάββατο. Οπότε, φτιάχνω ένα πίνακα με τις τιμές μετακινημένες ένα βήμα προς τα δεξιά. Έτσι αν δώσω Κυριακή (0) θα πάρω 6, αν δώσω Δευτέρα(1) θα πάρω (0) και αν δώσω Σάββατο (6) θα πάρω 5.

    Μετά, εκμεταλλεύομαι το γεγονός ότι το DayOfWeek βασίζεται σε Integer και κάνω την αφαίρεση (Friday - dayOfWeek) για να πάρω τη διαφορά σε ημέρες.

    Ακόμη πιο ωραίο βέβαια θα ήταν αν έφτιαχνα ένα extension method έτσι ώστε να γράψω κατευθείαν DateTimePicker1.Value.NearestWorkingDay ή κάτι παρόμοιο. Μέχρι όμως να θυμηθώ πως γίνεται αυτό σε VB ...

     


    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  25-05-2009, 14:09 50943 σε απάντηση της 50924

    Απ: datetimepicker σε visual studio, C#

    ευχαριστώ φίλε,

    πιο σωστός (από software engineering σκοπιά) είναι ο κώδικας του παναγιώτη, οπότε βάλε αυτόν

    και σήμανε την ερώτηση σαν απαντημένη


    Νικόλαος Καντζέλης
    BSc, MSc, MCAS, MCPD, MCITP, MCTS,MCP, MCT
    http://www.nksolutions.gr
    http://dotnetstories.wordpress.com
    http://weblogs.asp.net/dotnetstories
    http://forum.dotnetnuke.gr
  •  25-05-2009, 15:09 50948 σε απάντηση της 50943

    Απ: datetimepicker σε visual studio, C#

    Τελευταία προσπάθεια

       
     if((int)dateTimePicker1.Value.DayOfWeek % 6 == 0)
        dateTimePicker1.Value = dateTimePicker1.Value.AddDays(-1 * (2 - (int)dateTimePicker1.Value.DayOfWeek / 6));

  •  25-05-2009, 15:45 50956 σε απάντηση της 50948

    Απ: datetimepicker σε visual studio, C#

    Ευχαριστώ πολυ παιδια!!!
  •  25-05-2009, 15:49 50957 σε απάντηση της 50948

    Απ: datetimepicker σε visual studio, C#

    EmbarrassedΣωστός! Χαζομάρα μου να μη σκεφτώ την απλούστερη λύση! Φτάνει να αφαιρέσεις αυτό το (-1* ...) και να γράψεις (((int)dateTimePicker1.Value.DayOfWeek / 6) -2). Δεν χρειάζεται ο επιπλέον πολλαπλασιασμός!

    Θα μπορούσες να το κάνεις ακόμα πιο γρήγορα, αν δεν υπήρχε ένα προβληματάκι στο .NET. Οι επεξεργαστές x86 έχουν μία εντολή η οποία επιστρέφει το πηλίκο και το υπόλοιπο απευθείας. Δυστυχώς, η μέθοδος Math.DivRem αντί να εκτελεί αυτή την εντολή υπολογίζει το πηλίκο και το υπόλοιπο σε δύο βήματα (/, %) και μετά σου επιστρέφει το αποτέλεσμα.


    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems