Θέλω στο κλείσιμο μίας DLLForm από dotNet (από το (x) στο tab κλπ) να κάνω κάποιες ενέργειες και αν είναι απαραίτητο να μην επιτρέψω το κλείσιμο της φόρμας, όπως επίσης και να κλείνω την φόρμα με κώδικα αν χρειαστεί.
Αυτό που γίνεται τώρα είναι ότι στο event FormClosing της φόρμας (αφού έχω πατήσει (x)) ότι και να κάνω, είτε exception είτε e.cancel = true η φόρμα τελικά κλείνει (για την ακρίβεια έχει κλείσει πριν φτάσει στο event (οπτικά τουλάχιστον).
Από την άλλη όταν κάνω close την φόρμα με κώδικα (δεύτερη περίπτωση) τότε η φόρμα κλείνει αλλά μένει ανοικτό το tab!
Υπάρχει λύση στα παραπάνω ή αν όχι υπάρχει περίπτωση να γίνει κάτι σε νεότερη έκδοση;
Ευχαριστώ
Ν. Τραμπούλης
δεν νομίζω οτι είναι τοσο τραγικά τα πράγματα με τα Custom στο SoftOne
όσο τα
περιγράφεις.
Η αλήθεια βέβαια είναι οτι δεν έχω ασχοληθεί με dotNet και δεν μπορώ
να
εκφέρω αποψη για τυχόν θέματα που έχει το dotNet.
Στο κείμενο σου ομως θέτεις το θέμα κατά πόσο "σοβαρά" είναι τα
custom
που μπορούν να αναπτυχθούν με το SoftOne.
Η δικιά μου αποψη είναι ριζικά αντίθετη. Μπορούν να αναπτυχθουν τόσο
inprocess
όσο και outprocess. ( outprocess αναφέρομαι σε Delphi Dll
υλοποιήσεις).
Δουλεύοντάς τα εδώ και 4 χρόνια κανένα πρόβλημα επικοινωνίας με την
βάση
δεν παρατήρησα. Inprocess υπολογισμός εκκαθάρισης αγροτικών προιόντων
τρέχει queries αρκετά βαρυά σε custom εφαρμογή που υλοποιήσαμε και
παίξαν αψογα.
Το ιδιο και outprocess. Σε μία υλοποίηση custom
καταφέραμε να κάνουμε inprocess java script να επικοινωνεί και να
συνεργάζεται
αψογα με outprocess dll ( η java εγείρει event και συνεχίζει το
outprocess να κάνει την δουλειά ).
Ενα θέμα που θα έλεγα οτι υπάρχει
είναι το πως μπορεί να υλοποιηθεί καθε custom ( inprocess,
outprocess) η σωστή απόφαση είναι
συνδυασμός τεχνογνωσίας της ιδιας της εφαρμογής και του τελικού
αποτελέσματος που θέλουμε
να δώσουμε στον πελάτη.
Εγώ πάντα ξεκινάω inprocess και αν δεν με καλύψουν τα εργαλεία της
εφαρμογής
τότε θα κανω την δουλειά απέξω.
Επίσης να αναφέρουμε εδώ οτι η SoftOne είναι
η πρώτη που έχει δώσει τόση έμφαση σε custom υλοποιήσεις γιατί η ιδια
η δομή του Softone
είναι ένα Custom !
Ισως θα έπρεπε να αναρτηθεί εδώ κάπου στο group η ανάλυση που μας
είχε κάνει το
Φθινόπωρο του 2006 σε σεμινάριο στην Θεσσαλονίκη ο κ.Γιάννης
Γεωργουλάκης περί δομής του SoftOne.
Από την άλλη δεν ενδείκνυται να κλείνετε μόνος σας την external forma
η οποία στην περίπτωση μας λειτουργεί ως ένα control επομένως
αντιλαμβάνεστε τι σημαίνει αυτό. Μάλιστα κάτι τέτοιο δεν συμβαίνει
πουθενά μέσα στην εφαρμογή όπως θα έχετε παρατηρήσει.
Υ.Γ.
Όλα τα μηνύματα που αναρτώνται στο group μπαίνουν με προτεραιότητα στα
θέματα του R&D.
Ποια events καλούνται;
-- σε περίπτωση που είναι χρήσιμο:
πριν 1 χρόνο περίπου που είχα ασχοληθεί,
ο μόνος σχετικά αξιόπιστος τρόπος που είχα βρει
για να κάνω κάποιες ενέργειες (όχι για να ακυρώνω το close event)
ήταν στο "Dispose method" του generated κωδικα της φόρμας
δηλαδή: στο myForm.Designer.cs
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should
be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
// custom code to dispose object
// on Form Close
if (myObject != null)
{
myObject.UnloadResources();
myObject = null;
}
components.Dispose();
}
base.Dispose(disposing);
}
Μάκης Τσιντσικλόγλου
Ροδιακή Πληροφορική
Μάκης Τσιντσικλόγλου
Ροδιακή Πληροφορική
Αυτό που δεν μπορούσες να κάνεις μεχρι σήμερα ήταν να αποτρέψεις το
κλείσιμο της form.
Δηλαδή εαν έθετες το property Cancel = true δεν το λαμβάναμε μέσα από
το soft1 υποψη και προχωρούσαμε σε κλεισιμο της form.
Στην εκδοση που βγήκε (3.11.494.10070) έχει υλοποιηθεί και αυτό.
Παράδειγμα :
private void Form2_FormClosing(object sender, FormClosingEventArgs e)
{
e.Cancel = true;