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

 

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

Μinimizing modal child form closes it!

Îåêßíçóå áðü ôï ìÝëïò micfarmakis. Τελευταία δημοσίευση από το μέλος γιωργος μπακογιαννης στις 19-05-2008, 09:39. Υπάρχουν 3 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  16-05-2008, 15:36 42043

    Μinimizing modal child form closes it!

    public partial class Form1 : Form
    {
    public Form1()
    {
    InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
    using (Form f = new Form())
    {
    f.Resize += new EventHandler(f_Resize);
    f.ShowDialog(this);
    MessageBox.Show("It should never get here unless you close the form!!!!");
    }

    }

    void f_Resize(object sender, EventArgs e)
    {
    Form f = (Form)sender;
    if (f.Owner != null) { f.Invoke(new MethodInvoker(delegate() { f.Owner.WindowState = f.WindowState; })); }
    }
    }

    Ήθελα να μπορώ να σηκώσω μια modal child form και κάνοντάς την minimized να αλλάζει και το windowstate της owner.

    Αν δεν προσθέσω το resize handler ( comment out f.Resize += new EventHandler(f_Resize);) τότε έχω το επιθυμητό αποτέλεσμα.

    Αλλά αν αφήσω το handler κάνοντας minimize th child form παίρνω ένα dialogResult.Cancel και κλείνει. Έχεις κάποιος καμμιά ιδέα για ποιο λόγο  συμβαίνει αυτό?

    Ευχαριστώ εκ των προτέρων για το χρόνο σας

     

  •  17-05-2008, 08:00 42046 σε απάντηση της 42043

    Απ: Μinimizing modal child form closes it!

    Όταν χρησιμοποιείς τη using το object “f” γίνεται destroy.
    while (!dead) learn();
  •  18-05-2008, 23:36 42076 σε απάντηση της 42046

    Απ: Μinimizing modal child form closes it!

    Γιώργο, αν δεν επιστρέψει η ShowDialog δεν πρόκειται να γίνει destroy η f. Αν π.χ. δεν υπάρχει η f_Resize, η Child φόρμα μπορεί άνετα να γίνει minimize χωρίς να επιστρέψει η ShowDialog. Όπως φαίνεται και σε αυτό το thread στο MSDN, όταν η parent φόρμα γίνεται minimize, κλείνει και η child. Η συμπεριφορά αυτή είναι by-design. Η λύση που προτείνει όμως το thread δουλεύει: Αντί για τη ShowDialog, καλούμε τη Show αφού πρώτα κάνουμε Disable την parent form. Μετά, στο FormClosed event της child, επανενεργοποιούμε την parent.

    public partial class Form1 : Form
    {

       public Form1()
       {
          InitializeComponent();
       }

       private void Form1_Load(object sender, EventArgs e)
       {
       }

       void f_Resize(object sender, EventArgs e)
       {
          Form f = sender as Form;
          if (f.WindowState == FormWindowState.Minimized)
          {
             this.WindowState = FormWindowState.Minimized;
          }
          else
          {
             this.WindowState = FormWindowState.Normal;
          }
       }

       private void button1_Click(object sender, EventArgs e)
       {
          Form f = new Form();
          f.Resize += new EventHandler(f_Resize);
          this.Enabled = false;
          f.FormClosed += new FormClosedEventHandler(f_FormClosed);
          f.Show();
       }

       void f_FormClosed(object sender, FormClosedEventArgs e)
       {
          this.Enabled = true;
       }
    }


    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  19-05-2008, 09:39 42080 σε απάντηση της 42076

    Απ: Μinimizing modal child form closes it!

    Δεν το πρόσεξα νόμιζα ότι ήταν η Show. Και φυσικά εννοείτε ότι δεν θα γίνει κάτι αφού περιμένει να κλείσει η φόρμα με το ShowDialog. Η ταχύτητα καμία φορά δεν είναι καλός σύμβουλος.

    Άσχετα με τα παραπάνω:
    Η παροιμία λέει: όποιος βιάζεται σκοντάφτει. Αλλά υπάρχει και μία άλλη παροιμία που μας τα λέει ανάποδα. Το γοργόν και χάριν έχει. Τελικά οι παροιμίες είναι σαν τη Πυθία.


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