Προφανώς και πρέπει κανείς να διαβάζει το documentation, αλλά θα πρέπει και να δοκιμάζει αν η λύση που προτείνει δουλεύει. Το FormClosingEventArgs.CloseReason property δεν διαχωρίζει αν ο χρήστης πάτησε το Χ ή κάλεσε την Form.Close στο Click event ενός κουμπιού. Και στις δύο περιπτώσεις θα σου επιστρέψει UserClosing.
Η αλήθεια είναι ότι βρίσκω κάπως περίεργη την ανάγκη γι αυτή τη διαφοροποίηση. Αν πρέπει να εκτελεστεί διαφορετικός κώδικας όταν πατηθεί κάποιο "Close" button, αυτό θα πρέπει να γίνει στο Click του button, όχι στο FormClosing. Θα πρέπει να μας εξηγήσεις τί προσπαθείς να κάνεις για να καταλάβουμε ποιά λύση είναι καλύτερη.
Για παράδειγμα, μπορεί να θέλεις να εκτελέσεις κάποιο κώδικα είτε ο χρήστης κλείσει τη φόρμα με κουμπί είτε με το Χ, αλλά δεν θέλεις να το εκτελέσεις δύο φορές. Μία πιθανή λύση είναι να βάλεις αυτό τον κώδικα σε ένα function και να προσθέσεις ένα flag στη φόρμα το οποίο θα γίνεται true την πρώτη φορά που θα καλείς το function. Αν το function κληθεί δεύτερη φορά, απλά θα επιστρέφει αμέσως.
Παναγιώτης Καναβός, Freelancer
Twitter: http://www.twitter.com/pkanavos