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

 

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

VB.Net & Setup Property Value

Îåêßíçóå áðü ôï ìÝëïò George Parissis. Τελευταία δημοσίευση από το μέλος Libra Storm στις 06-07-2011, 18:51. Υπάρχουν 7 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  05-07-2011, 22:21 66493

    VB.Net & Setup Property Value

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

    Δημιουργία, Προβολή, Διαγραφή και Ανανέωση. Τα κλασσικά θα έλεγα που βάζουν όλοι.

    Η λειτουργία της φόρμας είναι να δείχνει εγγραφές από έναν πίνακα οπότε αν αυτές δεν υπήρχαν θα ήθελα τα κουμπία Προβολή & Διαγραφή να είναι απενεργοποιημένα. Έβαλα λοιπόν στο BindingSource ListChanged Event τον εξής κώδικα:

    btnEdit.Enabled=btnDelete.Enabled=RowsBindingSource.Count > 0

    Ο παραπάνω κώδικας δεν παίζει. Το btnDelete πέρνει κανονικά την τιμή του ενώ το btnEdit την ανάποδη.

    Αν έχω εγγραφές το Edit είναι απενεργοποιημένο και το Delete ενεργοποιημένο. Αν δεν έχω εγγραφές το Edit είναι ενεργοποιημένο και το Delete απενεργοποιημένο. Και όπως καταλαβαίνεται προβληματίστικα για την συμπεριφορά αυτή. Γιατί άραγε γίνεται αυτό;

  •  05-07-2011, 22:28 66494 σε απάντηση της 66493

    Απ: VB.Net & Setup Property Value

    Και αν τα σπάσεις σε ξεχωριστές γραμμές?

    Και μην ξεχνάμε, ότι στη VB.NET το '=' σημαίνει και ανάθεση και συγκριση. Η γραμμή που έγραψες μάλλον δεν κάνει αυτό που νομίζεις


    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  05-07-2011, 22:38 66495 σε απάντηση της 66493

    Απ: VB.Net & Setup Property Value

    Μάλλον έχει να κάνει με τον "τρόπο" που γίνεται το assignment. Το btnEdit "παίρνει" την παλιά τιμή του btnDelete και μετά αλλάζει η τιμή στο btnDelete ανάλογα με το αν υπάρχουν εγγραφές ή όχι. Το ότι αλλάζει το enabled state του btnDelete δε σημαίνει ότι πρέπει να γίνει ξανά assignment στο state του btnEdit. Δοκίμασε να το γράψεις έτσι για να δεις αν παίζει:

    btnEdit.Enabled=(btnDelete.Enabled=RowsBindingSource.Count > 0)

    Διαφορετικά, ή θα τα σπάσεις σε δύο σειρές όπως λέει ο Παναγιώτης, ή σε ένα από τα δύο buttons η αλλαγή του state θα γίνεται μέσα από το EnabledChanged event handler του άλλου button. Θα έχει ενδιαφέρον, όμως, να μας πεις αν λειτουργεί με την παρένθεση ή όχι.

    Ακόμα κι ένας άνθρωπος μπορεί ν' αλλάξει τον κόσμο. Μη θέλεις να κυβερνήσεις. Απλά δείξε το μονοπάτι κι ο κόσμος θ' ακολουθήσει!!
  •  06-07-2011, 02:06 66496 σε απάντηση της 66495

    Απ: VB.Net & Setup Property Value

    Συνημμένα: Property Assignment.zip

    Παναγιώτη συμφωνώ, η γραμμή που έγραψα δεν κάνει αυτό που νομίζω.

    Το Default state του Enabled είναι True σε όλα τα Buttons.

    Μάρκο οι παρένθεση έχει ακριβώς την ίδια συμπεριφορά.

    Πιο πολύ το βλέπω σαν άσκηση και μου έχει κινήση την περιέργεια. Φυσικά το έσπασα σε δύο γραμμές για να συνεχίσω αλλά αν κανείς έχει μία εξήγηση γιατί συμβαίνει αυτό ενώ όπως προανέφερα φαίνεται τόσο απλό.

    Σας έχω φτιάξει και ένα μικρό project για να το δείτε και οι ίδιοι και να κάνετε ότι πειραματισμούς θελήσετε.

  •  06-07-2011, 14:21 66502 σε απάντηση της 66496

    Απ: VB.Net & Setup Property Value

    ΦΤΟΥΟΥΟΥΟΥ!!! Η βλακεία δεν έχει όρια!! Και αναφέρομαι, βέβαια, στη δική μου βλακεία...

    Είναι απολύτως λογικό να μην αλλάζει η συμπεριφορά με την παρένθεση. Μέσα στην παρένθεση γίνεται ένα assignment. Η έκφραση, όμως, μέσα στην παρένθεση δεν επιστρέφει μια boolean τιμή για να αλλάξει και το state του πρώτου button. Αλλιώς βλέπεις τα πράγματα την ημέρα, αλλιώς τη νύχτα... Νομίζω πως μένουμε με την αρχική λύση.

    Ακόμα κι ένας άνθρωπος μπορεί ν' αλλάξει τον κόσμο. Μη θέλεις να κυβερνήσεις. Απλά δείξε το μονοπάτι κι ο κόσμος θ' ακολουθήσει!!
  •  06-07-2011, 14:26 66503 σε απάντηση της 66496

    Απ: VB.Net & Setup Property Value

    Ανοίξτε τα properties του project και μετά το compile section. Αλλάξτε το option strict από off σε on. Η "παράξενη" αυτή συμπεριφορά οφείλεται στο late binding της VB. Με option strict off θα αντιμετωπίσετε προβλήματα στο performance και bugs που είναι δύσκολο να βρεθούν και να λυθούν.

    Error 1 Option Strict On disallows implicit conversions from 'Boolean' to 'Integer'.

    btnEdit.Enabled = (btnDelete.Enabled = (TestBindingSource.Count > 0)) (το 1ο = είναι ανάθεση το 2ο = είναι σύγκριση) 
     
  •  06-07-2011, 18:22 66504 σε απάντηση της 66503

    Απ: VB.Net & Setup Property Value

    Σωστή παρατήρηση, το είχα ξεχάσει το Option Strict και όπως περιέγραψες κάνει πρώτα την σύγκριση με το btnDelete και στην συνέχεια την ανάθεση στο btnEdit.

    Στην C# η γραμμή btnEdit.Enabled=btnDelete.Enabled=RowsBindingSource.Count>0 θα έκανε ανάθεση τιμής σε όλα τα buttons ή θα είχε την ίδια συμπεριφορά όπως με την VB;

  •  06-07-2011, 18:51 66505 σε απάντηση της 66504

    Απ: VB.Net & Setup Property Value

    Στην C# θα κάνει ανάθεση τις τιμής και στα δύο κουμπιά. Σύγκρινε αν θέλεις τις δύο αυτές προτάσεις γιά να δεις τι αποτελέσματα βγάζουν.

    btnEdit.Enabled = btnDelete.Enabled = TestBindingSource.Count > 0;
    btnEdit.Enabled = btnDelete.Enabled == TestBindingSource.Count > 0;



Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems