public void AfegeixEtiqueta(String sTitol, FormFitxaOpcions ffo = FormFitxaOpcions.Cap, int iTag = 0)
        {
            if ((ffo & FormFitxaOpcions.AlCostat) == FormFitxaOpcions.AlCostat)
            {
                x = iUltimaPosX;
                // Si no hi ha label, no cal tant d'espai
                if (sTitol != "")
                {
                    x = x + AMPLADA_ENTRE_OBJECTES;
                }
                y = y - ALTURA_ENTRE_OBJECTES;
            }
            else
            {
                x = 0;
            }

            Label lbl = new Label();

            lbl.Text     = sTitol;
            lbl.Left     = x;
            lbl.Top      = y + 4;
            lbl.AutoSize = true;
            FPanel.Controls.Add(lbl);

            if ((ffo & FormFitxaOpcions.AlCostat) == FormFitxaOpcions.AlCostat)
            {
                SizeF size = lbl.CreateGraphics().MeasureString(lbl.Text, lbl.Font);
                x = x + (int)size.Width + AMPLADA_ENTRE_ETIQUETA;
            }
            else
            {
                x = x + 50;
            }
        }
        public void AfegeixData(String sTitol, String sCamp, FormFitxaOpcions ffo = FormFitxaOpcions.Cap)
        {
            AfegeixEtiqueta(sTitol, ffo);

            DateTimePicker tb = new DateTimePicker();

            tb.DataBindings.Add("Text", FBindingSource, sCamp, true);
            tb.Left     = x + 100;
            tb.Top      = y;
            iUltimaPosX = x + tb.Width;
            //            ComprovaPrimerElement(obj);
            //            if not Encolumnat then
            y = y + ALTURA_ENTRE_OBJECTES;
            FPanel.Controls.Add(tb);
        }
        /// <summary>
        /// Afegeix un camp booleà en forma de CheckBox.
        /// </summary>
        /// <param name="sTitol">Títol del camp.</param>
        /// <param name="sCamp">Nom del camp (de la base de dades).</param>
        /// <param name="ffo">Opcions.</param>
        public void AfegeixBoolea(String sTitol, String sCamp, FormFitxaOpcions ffo = FormFitxaOpcions.Cap)
        {
            AfegeixEtiqueta(sTitol, ffo);

            CheckBox cb = new CheckBox();

            cb.DataBindings.Add("Checked", FBindingSource, sCamp, true);
            cb.Left = x + 100;
            cb.Top  = y;
            //tb.Width = iLongitud;
            iUltimaPosX = x + cb.Width;
            //            ComprovaPrimerElement(obj);
            //            if not Encolumnat then
            y = y + ALTURA_ENTRE_OBJECTES;
            FPanel.Controls.Add(cb);
        }
        public void AfegeixLlistaDB(String sTitol, String sCamp, int iLongitud, String sTaula, String sCampClau, String sCampValor, Type ClasseRecerca, FormFitxaOpcions ffo = FormFitxaOpcions.Cap)
        {
            AfegeixEtiqueta(sTitol, ffo);

            XEditLookup eb = new XEditLookup();

            eb.Connexio  = FConnexio;
            eb.Taula     = sTaula;
            eb.CampClau  = sCampClau;
            eb.CampValor = sCampValor;
            eb.DataBindings.Add("Text", FBindingSource, sCamp, true);
            eb.Left          = x + 100;
            eb.Top           = y;
            iUltimaPosX      = x + eb.Width;
            eb.ButtonClick  += eb_Click;
            eb.ClasseRecerca = ClasseRecerca;
            //FClasseRecerca = ClasseRecerca;
            //            ComprovaPrimerElement(obj);
            //            if not Encolumnat then
            y = y + ALTURA_ENTRE_OBJECTES;
            FPanel.Controls.Add(eb);
        }
        /// <summary>
        /// Afegeix un desplegable amb una llista d'opcions. Les opcions tenen el format clau-valor.
        /// </summary>
        /// <param name="sTitol">Etiqueta del desplegable.</param>
        /// <param name="sCamp">Nom del camp de la base de dades.</param>
        /// <param name="iLongitud">Amplada del desplegable.</param>
        /// <param name="Codis">Llista de codis (valor intern que es desarà a la base de dades) del desplegable.</param>
        /// <param name="Codis">Llista de valors que es mostraran al desplegable.</param>
        public void AfegeixLlista(String sTitol, String sCamp, int iLongitud, int[] Codis, string[] Valors, FormFitxaOpcions ffo = FormFitxaOpcions.Cap)
        {
            AfegeixEtiqueta(sTitol, ffo);

            ComboBox cb = new ComboBox();

            cb.DataBindings.Add(new Binding("SelectedValue", FBindingSource, sCamp, true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
            cb.DropDownStyle = ComboBoxStyle.DropDownList;
            cb.Left          = x + 100;
            cb.Top           = y;
            iUltimaPosX      = x + cb.Width;

            DataTable dsTbl = new DataTable("ds" + sCamp);

            dsTbl.Columns.Add("key", typeof(string));
            dsTbl.Columns.Add("value", typeof(string));
            // Iterem 2 arrays amb un sol bucle
            // http://stackoverflow.com/questions/1955766/iterate-two-lists-or-arrays-with-one-foreach-statement-in-c-sharp
            foreach (var CodiValor in Codis.Zip(Valors, Tuple.Create))
            {
                object[] row = new object[2];
                row[0] = CodiValor.Item1;
                row[1] = CodiValor.Item2;
                dsTbl.Rows.Add(row);
            }
            cb.DataSource    = dsTbl;
            cb.ValueMember   = "key";
            cb.DisplayMember = "value";

            y = y + ALTURA_ENTRE_OBJECTES;
            FPanel.Controls.Add(cb);
        }