Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : [C#] MDI child et MDI parent : Laison [ Archives / .NET ] (MickParadiseLost)

mardi 12 juillet 2005 à 11:23:07 | [C#] MDI child et MDI parent : Laison

MickParadiseLost

Bonjour a tous,
J'ai une barre d'outils dans ma forme principale et elle contient un pinceau et une gomme.
J'aimerai pouvoir peindre avec mon pinceau dans la mdi child.
Comment on fait svp ?


mardi 12 juillet 2005 à 12:07:25 | Re : [C#] MDI child et MDI parent : Laison

aogie

Bonjour,

Quand ton bouton de pinceau est enfoncé, une variable de la mainform indiquera donc qu'on se trouve en mode dessin avec pinceau (ex : penDrawing = true) et une autre variable contiendra le pinceau paramétré par l'utilisateur (configuration de la couleur et de l'épaisseur de trait).

Ensuite, pour le dessin à main levée, il faut surcharger OnMouseMove sur la feuille enfant.
Vérifier que e.Button == MouseButtons.Left. Si c'est le cas, tu mets à jour par la méthode SetPixel() un bitmap conservé en variable membre, puis :
- si tu ne travailles pas avec un PictureBox : appel de la méthode Invalidate(). Dans la surcharge OnPaint(), tu n'as plus qu'à dessiner le dessin.
ou
- si tu travailles avec un PictureBox : mise à jour de la propriété Image.

-- AOGie --

mardi 12 juillet 2005 à 23:16:32 | Re : [C#] MDI child et MDI parent : Laison

MickParadiseLost

Oui je travaille sans picturebox parsque j'arrive toujours pas a le faire marcher sinon.
Mais euh je suis vraiment débutant en c# et réaliser ce que tu viens de me dire c'est impossible pour moi car je comprend bien le principe mais pour coder les controles utilisateurs, le fait de cliquer sur un bouton sa provoque une variable, je comprend pas lol.
Parsque en fait, je veux que quand je clique sur le pinceau il se passe:
-la fleche de la souris se transforme en rond.
-dans un panel apparait un champ de saisie pour modifier le diametre du rond de la souris.
-dans ce panel apparait aussi une boite de couleurs (pas d'influence sur le pointeur de souris mais la couleur du trait sera celle de la couleur choisie)
-lorsque je clique sur la mdichild a l'endroit du dessin, le trait se fait comme un vrai pinceau. (quand on a le bouton de souris enfoncé on dessine, lorsqu'il ne l'est pas sa s'arréte).
si tu peux me faire un exemple sa serait génial et j'aurais pu qu'a le faire pour les autres outils de ma boite a outils.
Merci d'avance


mercredi 13 juillet 2005 à 09:51:50 | Re : [C#] MDI child et MDI parent : Laison

aogie

Je viens de te faire un exemple pour le dessin à main levée. Pour changer la couleur du trait, tu double cliques sur le carré de couleur :

using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;

namespace TestPaint
{
    /// <summary>
    /// Description résumée de Form1.
    /// </summary>
    public class Form1 : System.Windows.Forms.Form
    {
        private Bitmap                            _bmp = null;
        private Pen                                _pen = null;
        private Point                            _lastPt = Point.Empty;

        private System.Windows.Forms.CheckBox chk_Pen;
        private System.Windows.Forms.Panel pan_Draw;
        private System.Windows.Forms.ColorDialog colorDlg;
        private System.Windows.Forms.Label label1;
        private System.Windows.Forms.Label lbl_Color;
        private System.Windows.Forms.ComboBox cb_PenWidth;
        private System.Windows.Forms.Label label2;
        /// <summary>
        /// Variable nécessaire au concepteur.
        /// </summary>
        private System.ComponentModel.Container components = null;

        public Form1()
        {
            //
            // Requis pour la prise en charge du Concepteur Windows Forms
            //
            InitializeComponent();

            _bmp = new Bitmap(pan_Draw.Width, pan_Draw.Height);
            _pen = new Pen(Color.Black);
            lbl_Color.BackColor = Color.Black;

            for (int i = 1; i < 5; i++)
                cb_PenWidth.Items.Add(i);
            cb_PenWidth.SelectedIndex = 0;
        }

        /// <summary>
        /// Nettoyage des ressources utilisées.
        /// </summary>
        protected override void Dispose( bool disposing )
        {
            if( disposing )
            {
                if (_bmp != null) _bmp.Dispose();
                if (_pen != null) _pen.Dispose();

                if (components != null)
                {
                    components.Dispose();
                }
            }
            base.Dispose( disposing );
        }

        #region Code généré par le Concepteur Windows Form
        /// <summary>
        /// Méthode requise pour la prise en charge du concepteur - ne modifiez pas
        /// le contenu de cette méthode avec l'éditeur de code.
        /// </summary>
        private void InitializeComponent()
        {
            this.chk_Pen = new System.Windows.Forms.CheckBox();
            this.pan_Draw = new System.Windows.Forms.Panel();
            this.colorDlg = new System.Windows.Forms.ColorDialog();
            this.label1 = new System.Windows.Forms.Label();
            this.lbl_Color = new System.Windows.Forms.Label();
            this.cb_PenWidth = new System.Windows.Forms.ComboBox();
            this.label2 = new System.Windows.Forms.Label();
            this.SuspendLayout();
            //
            // chk_Pen
            //
            this.chk_Pen.Appearance = System.Windows.Forms.Appearance.Button;
            this.chk_Pen.BackColor = System.Drawing.SystemColors.Control;
            this.chk_Pen.Location = new System.Drawing.Point(8, 8);
            this.chk_Pen.Name = "chk_Pen";
            this.chk_Pen.Size = new System.Drawing.Size(64, 24);
            this.chk_Pen.TabIndex = 0;
            this.chk_Pen.Text = "Pinceau";
            this.chk_Pen.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
            this.chk_Pen.CheckedChanged += new System.EventHandler(this.chk_Pen_CheckedChanged);
            //
            // pan_Draw
            //
            this.pan_Draw.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
                | System.Windows.Forms.AnchorStyles.Left)
                | System.Windows.Forms.AnchorStyles.Right)));
            this.pan_Draw.BackColor = System.Drawing.Color.White;
            this.pan_Draw.Location = new System.Drawing.Point(0, 37);
            this.pan_Draw.Name = "pan_Draw";
            this.pan_Draw.Size = new System.Drawing.Size(456, 280);
            this.pan_Draw.TabIndex = 1;
            this.pan_Draw.SizeChanged += new System.EventHandler(this.pan_Draw_SizeChanged);
            this.pan_Draw.MouseUp += new System.Windows.Forms.MouseEventHandler(this.pan_Draw_MouseUp);
            this.pan_Draw.Paint += new System.Windows.Forms.PaintEventHandler(this.pan_Draw_Paint);
            this.pan_Draw.MouseMove += new System.Windows.Forms.MouseEventHandler(this.pan_Draw_MouseMove);
            //
            // label1
            //
            this.label1.Location = new System.Drawing.Point(88, 16);
            this.label1.Name = "label1";
            this.label1.Size = new System.Drawing.Size(56, 16);
            this.label1.TabIndex = 3;
            this.label1.Text = "Couleur :";
            //
            // lbl_Color
            //
            this.lbl_Color.Location = new System.Drawing.Point(144, 8);
            this.lbl_Color.Name = "lbl_Color";
            this.lbl_Color.Size = new System.Drawing.Size(24, 23);
            this.lbl_Color.TabIndex = 0;
            this.lbl_Color.DoubleClick += new System.EventHandler(this.lbl_Color_DoubleClick);
            //
            // cb_PenWidth
            //
            this.cb_PenWidth.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
            this.cb_PenWidth.Location = new System.Drawing.Point(256, 11);
            this.cb_PenWidth.Name = "cb_PenWidth";
            this.cb_PenWidth.Size = new System.Drawing.Size(48, 21);
            this.cb_PenWidth.TabIndex = 4;
            this.cb_PenWidth.SelectedIndexChanged += new System.EventHandler(this.cb_PenWidth_SelectedIndexChanged);
            //
            // label2
            //
            this.label2.Location = new System.Drawing.Point(184, 16);
            this.label2.Name = "label2";
            this.label2.Size = new System.Drawing.Size(64, 16);
            this.label2.TabIndex = 5;
            this.label2.Text = "Epaisseur :";
            //
            // Form1
            //
            this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
            this.BackColor = System.Drawing.SystemColors.Control;
            this.ClientSize = new System.Drawing.Size(456, 317);
            this.Controls.Add(this.label2);
            this.Controls.Add(this.cb_PenWidth);
            this.Controls.Add(this.lbl_Color);
            this.Controls.Add(this.label1);
            this.Controls.Add(this.pan_Draw);
            this.Controls.Add(this.chk_Pen);
            this.Name = "Form1";
            this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
            this.Text = "Form1";
            this.ResumeLayout(false);

        }
        #endregion

        /// <summary>
        /// Point d'entrée principal de l'application.
        /// </summary>
        [STAThread]
        static void Main()
        {
            Application.Run(new Form1());
        }

        private void chk_Pen_CheckedChanged(object sender, System.EventArgs e)
        {
            Cursor = (chk_Pen.Checked ? Cursors.Cross : Cursors.Default);
        }

        #region Evénements pan_Draw

        #region pan_Draw_MouseMove
        private void pan_Draw_MouseMove(object sender, System.Windows.Forms.MouseEventArgs e)
        {
            if (e.Button == MouseButtons.Left && chk_Pen.Checked)
            {
                Point mouse = new Point(e.X, e.Y);
                if (_lastPt == Point.Empty) _lastPt = mouse;

                float penWidth = _pen.Width;
                using (Graphics g = Graphics.FromImage(_bmp))
                {
                    g.DrawLine(_pen, _lastPt, mouse);       
                }

                //création du rectangle ajusté, de modification
                Rectangle rect = new Rectangle(
                    Math.Min(_lastPt.X, mouse.X),
                    Math.Min(_lastPt.Y, mouse.Y),
                    Math.Abs(_lastPt.X - mouse.X),
                    Math.Abs(_lastPt.Y - mouse.Y)
                    );
                rect.Inflate(5, 5);
                pan_Draw.Invalidate(rect, false);

                _lastPt = mouse;
            }
        }
        #endregion

        #region pan_Draw_SizeChanged
        private void pan_Draw_SizeChanged(object sender, System.EventArgs e)
        {
            //modification du dessin interne
            Bitmap bmp = new Bitmap(pan_Draw.Width, pan_Draw.Height);
            using (Graphics g = Graphics.FromImage(bmp))
            {
                g.DrawImage(_bmp, 0, 0);
            }
            _bmp = bmp;
        }
        #endregion

        #region pan_Draw_Paint
        private void pan_Draw_Paint(object sender, System.Windows.Forms.PaintEventArgs e)
        {
            //on dessine uniquement la partie modifiée
            e.Graphics.DrawImage(
                _bmp,
                e.ClipRectangle,
                e.ClipRectangle,
                GraphicsUnit.Pixel
                );
        }
        #endregion

        #region pan_Draw_MouseUp
        private void pan_Draw_MouseUp(object sender, System.Windows.Forms.MouseEventArgs e)
        {
            //initialisation du dernier point
            _lastPt = Point.Empty;
        }
        #endregion

        #endregion

        private void lbl_Color_DoubleClick(object sender, System.EventArgs e)
        {
            //couleur originale
            colorDlg.Color = _pen.Color;
            if (colorDlg.ShowDialog() == DialogResult.OK)
            {
                //assignation de la nouvelle couleur
                _pen.Color = colorDlg.Color;
                lbl_Color.BackColor = _pen.Color;
            }
        }

        private void cb_PenWidth_SelectedIndexChanged(object sender, System.EventArgs e)
        {
            //décalage de 1 entre index et valeur affichée
            _pen.Width = cb_PenWidth.SelectedIndex + 1;
        }
    }
}


-- AOGie --

mercredi 13 juillet 2005 à 22:45:08 | Re : [C#] MDI child et MDI parent : Laison

MickParadiseLost

Oh merci beaucoup pour l'exemple Aogie.
Je vais éssayer d'adapter ceci a mon projet avec mon MDI child.
éh euh toi tu dessine dans un panel, mais moi je dessine directement sur ma fenetre. ça change grand chose ?


jeudi 14 juillet 2005 à 17:08:06 | Re : [C#] MDI child et MDI parent : Laison

aogie

Non, c'est exactement pareil.
Bon code,

-- AOGie --



Cette discussion est classé dans : mdi, parent, child, pinceau, laison


Répondre à ce message

Sujets en rapport avec ce message

relation MDI child / parent [ par zouzounet ] bonjour :)tout d'abord, bonnes paques à tous :)j'ai ensuite une tite question qui me tracasse mon code :je suis sur une appli mdi, avec des child... l C# Fenêtre MDI Parent ET MDI Child à la fois? [ par fdev9 ] Bonjour, Ma question est assez simple : Est-il possible d'imbriquer les fenêtre MDI ? C'est à dire que ma form3 est le child de ma form2 qui elle m Accès MDI Parent depuis MDI Enfant ? [ par brejaud ] Bonjour,Voila , j'ai un problème sur lequel je me casse les dents , et je ne trouve pas la réponse même dans MSDN ...J'ai une fenetre MDI Parent , For mdi child [ par ull ] bonjourj'ai créer form1 qui est MdiContainer, et j'ai ajouter menu strip dans le Form1;dans le menu fichier il y a le sous menu Créer, qui est composé [C#] MDI: passage de paramêtres [ par MickParadiseLost ] Bonne nuit a tous, J'aimerais connaitre la méthode la plus simple pour pouvoir dessiner dans ma fenetre MDI child lorsque je clique sur un bouton dans position form child parapport a u form parent [ par bouzazi ] Salutj'amerai savoir comment recupere la position d'un form child relativement dans la form parent avec c# en visual studio 2005.merci Fenêtre de base MDI [ par nosil ] Hello tout le monde... J'ai encore besoin de votre aide si précieuse.... Je travaille avec des fenêtres en MDI. J'ai une MDIParent et des children. Communication inter-Fenetre (MDI Child vers Parent) [ par Neptune84 ] Je voudrais faire la chose suivante :WinFormPrinc est la fenetre Parent avec un menu menuItem6. Ce menu ouvre (Création) une fenetre MessageUn. Le pro Liens entre MDI Child [ par dals ] Salut à tous ceux qui liront mon msg!!! Je débute en VB .Net et mon soucis est d'arriver à établir un lien entre 2 de mes fenêtre filles... En effet j Affichage MDI Child [ par maitesn1 ] Salut tout le monde,j'ai un probleme pour afficher les fenetres enfants d'une mdi.Dans mon MDI j'y ai mais une PictureBox .Si je clique sur un menu qu


Nos sponsors

Sondage...

CalendriCode

Décembre 2008
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,281 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.