Κλείσιμο DllForm

162 views
Skip to first unread message

Nikos Trampoulis

unread,
Nov 18, 2009, 5:15:39 AM11/18/09
to so...@googlegroups.com

Θέλω στο κλείσιμο μίας DLLForm από dotNet (από το (x) στο tab κλπ) να κάνω κάποιες ενέργειες και αν είναι απαραίτητο να μην επιτρέψω το κλείσιμο της φόρμας, όπως επίσης και να κλείνω την φόρμα με κώδικα αν χρειαστεί.

Αυτό που γίνεται τώρα είναι ότι στο event FormClosing της φόρμας (αφού έχω πατήσει (x)) ότι και να κάνω, είτε exception είτε e.cancel = true η φόρμα τελικά κλείνει (για την ακρίβεια έχει κλείσει πριν φτάσει στο event (οπτικά τουλάχιστον).

Από την άλλη όταν κάνω close την φόρμα με κώδικα (δεύτερη περίπτωση) τότε η φόρμα κλείνει αλλά μένει ανοικτό το tab!

 

Υπάρχει λύση στα παραπάνω ή αν όχι υπάρχει περίπτωση να γίνει κάτι σε νεότερη έκδοση;

 

 

Ευχαριστώ

 

 

Ν. Τραμπούλης

Message has been deleted

Αθανασιάδης Γιώργος

unread,
Nov 21, 2009, 2:52:03 AM11/21/09
to Softone Developers Network
Δημήτρη γειά σου

δεν νομίζω οτι είναι τοσο τραγικά τα πράγματα με τα 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.

Message has been deleted

mki

unread,
Nov 23, 2009, 4:07:07 AM11/23/09
to Softone Developers Network
Στο κλείσιμο της φόρμας ενώ καλούνται κανονικά τα events δεν μπορείτε
αυτή τη στιγμή να το αποτρέψετε, πάντως εξετάζουμε πιθανές λύσεις που
θα μπορούσαν να δοθούν.

Από την άλλη δεν ενδείκνυται να κλείνετε μόνος σας την external forma
η οποία στην περίπτωση μας λειτουργεί ως ένα control επομένως
αντιλαμβάνεστε τι σημαίνει αυτό. Μάλιστα κάτι τέτοιο δεν συμβαίνει
πουθενά μέσα στην εφαρμογή όπως θα έχετε παρατηρήσει.

Υ.Γ.
Όλα τα μηνύματα που αναρτώνται στο group μπαίνουν με προτεραιότητα στα
θέματα του R&D.

MakisCE

unread,
Nov 25, 2009, 5:34:45 AM11/25/09
to Softone Developers Network
On 23 Νοέ, 11:07, mki <kostas.mouhe...@gmail.com> wrote:
> Στο κλείσιμο της φόρμας ενώ καλούνται κανονικά τα events  

Ποια 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);
}


Μάκης Τσιντσικλόγλου
Ροδιακή Πληροφορική

Nikos Trampoulis

unread,
Nov 25, 2009, 5:51:08 AM11/25/09
to so...@googlegroups.com
Το πρόβλημα σχετικά με αυτό το θέμα είναι ότι σε κάποιες περιπτώσεις (στις
περισσότερες κατά την άποψή μου) θέλεις να έχεις κάποια φόρμα με κάποιες
παραμέτρους, τις οποίες θα θέλεις να αποθηκεύεις με κάποια επιβεβαίωση
προφανώς ή δεν θα ήθελες (και δεν θα ήθελε και ο χρήστης) να έχει
συμπληρώσει ένα σκασμό πράγματα και από συνήθεια να πατήσει το (χ) για να
κλείσει την φόρμα και να πάνε όλα στον βρόντο!

Στο event που αναφέρεις (dispose) το κακό έχει γίνει και δεν υπάρχει
επιστροφή, ίσως να μπορούσες να κάνεις ερώτηση για να αποθηκεύσεις τα
δεδομένα αλλά δεν υπάρχει δυνατότητα ακύρωσης και το βασικότερο δεν είναι
καθόλου κομψό για τον χρήστη όταν η φόρμα που είχε μπροστά του έχει πρώτα
εξαφανιστεί (και μετά "σκάει" το event αυτό αν θυμάμαι καλά σε δοκιμές που
έκανα)!

Τέλος πάντων το θέμα δεν είναι και Super επείγον, αντιμετωπίζεται με
κάποιους τρόπους και καλή θέληση αλλά θα ήταν χρήσιμο να είχαμε κάποια
events που να σχετίζονται με την φόρμα της S1 που είναι από πίσω, το ίδιο
χρήσιμο θα ήταν αν είχαμε και κάποια key events τόσο στις dll forms όσο και
στις φόρμες/panels που λειτουργούν ως controls μέσα σε ήδη υπάρχουσες φόρμες
της εφαρμογής!


Ν. Τραμπούλης

MakisCE

unread,
Nov 25, 2009, 6:24:55 AM11/25/09
to Softone Developers Network
Αν η .net φόρμα είναι πάνω σε κάποιο S1 object (πχ FINDOC, TRDR, κλπ)
τότε με την πρώτη επεξεργασία των 'δικών σου' (dll) στοιχείων
βάζεις και το S1 Object σε 'επεξεργασία mode' (με edit ενός πεδιου του
S1 object)
ετσι εστε να ενεργοποιηθει ο στανταρ μηχανισμός αποθήκευσης του S1

Μάκης Τσιντσικλόγλου
Ροδιακή Πληροφορική

mki

unread,
Nov 26, 2009, 3:31:46 AM11/26/09
to Softone Developers Network
Στις dotNET froms υπάρχει ένα Event που λέγεται F o r m C l o s i n g.
Αυτό καλείτε πρίν κλείσει η form.
Εκεί μπορείς να βάλεις όποια ερώτηση θέλεις και ανάλογα να σώσεις ή να
μήν σώσεις τις όποιες αλλαγές.

Αυτό που δεν μπορούσες να κάνεις μεχρι σήμερα ήταν να αποτρέψεις το
κλείσιμο της form.
Δηλαδή εαν έθετες το property Cancel = true δεν το λαμβάναμε μέσα από
το soft1 υποψη και προχωρούσαμε σε κλεισιμο της form.

Στην εκδοση που βγήκε (3.11.494.10070) έχει υλοποιηθεί και αυτό.

Παράδειγμα :
private void Form2_FormClosing(object sender, FormClosingEventArgs e)
{
e.Cancel = true;

Nikos Trampoulis

unread,
Nov 26, 2009, 4:10:39 AM11/26/09
to so...@googlegroups.com
Σε ευχαριστώ για την απάντησή σου!

Σε αυτό ακριβώς το event είχα αναφερθεί στο αρχικό post αυτού του θέματος
και ευχαριστώ τους συναδέλφους από την s1 που το υλοποίησαν! Το μόνο που
μένει τώρα είναι να μας δώσουν και ένα Method (ή κάποιον τρόπο τέλος πάντων)
για να κλείνουμε την φόρμα με κώδικα. π.χ. όταν κάνουμε close την φόρμα να
κλείνει και το tab που τώρα μένει ανοικτό!

Αλήθεια που έμαθες ότι υλοποιήθηκε σε αυτή την έκδοση, γιατί στα νέα
εκδόσεων δεν είδα κάτι τέτοιο;


Ν. Τραμπούλης


-----Original Message-----
From: so...@googlegroups.com [mailto:so...@googlegroups.com] On Behalf Of
mki
Sent: Thursday, November 26, 2009 10:32 AM
To: Softone Developers Network
Subject: Re: Κλείσιμο DllForm

Αθανασιάδης Γιώργος

unread,
Nov 26, 2009, 5:08:08 AM11/26/09
to Softone Developers Network
Ο κ.Κώστας Μουχελής που σου απάντησε είναι του τμήματος R&D της
SoftOne.

Nikos Trampoulis

unread,
Nov 26, 2009, 5:16:09 AM11/26/09
to so...@googlegroups.com
Αααα! Sorry, νόμιζα ότι ήταν κάποιος συνεργάτης σας από την Ρόδο που είχε
απαντήσει σχετικά εχτές!!!!

Μπερδεύτηκα!

Ευχαριστώ πολύ για την υλοποίηση και την ενημέρωση!
Reply all
Reply to author
Forward
0 new messages