L'objet de cette programmation est d'ajouter un userControl contenant différents boutons, qui permettront chacun d'ajouter un article déterminé dans la vente ou l'achat en cours. Cette fonctionnalité peut être rencontrée en répétant ce paramétrage. Toutefois, dans le cadre d'un développement plus ambitieux, cette nouvelle approche offrira nettement plus de souplesse en termes de programmation.
Ce paramétrage est construit au départ du concept de l'ajout d'objets personnalisés dans les écrans personnalisables.
Pour simplifier cet exemple, nous le limitons à 3 boutons qui seront placés sur un UserControl qui implémente l'interface MercatorUi.MovableControls.Interfaces.IMovableControl. Par facilité, dans le haut du code, nous associons à chaque bouton l'identifiant (S_ID) d'un article en le plaçant dans sa propriété "Tag".
Le code de cette programmation est le suivant :
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Text;
using System.Windows.Forms;
namespace GescomButtons
{
public partial class GescomButtonsUserControl : UserControl, MercatorUi.MovableControls.Interfaces.IMovableControl
{
public GescomButtonsUserControl()
{
InitializeComponent();
// on "cache" le s_id de l'article dans le tag du bouton correspondant
button1.Tag = "618173914H";
button2.Tag = "618173915I";
button3.Tag = "618173916K";
}
#region propriétés requises par IMovableControl
// la Form qui héberge ce MovableObject
public MercatorUi.MovableControls.Interfaces.IFormForMovableControls Form { get; set; }
// indique que le contrôle est à la disposition de l'utilisateur : tous les évènements du style "valueChanged" sont causés par l'utilisateur, pas par Mercator
public bool UserMode { get; set; }
public bool AfterDone { get; set; }
public List<MercatorUi.MovableControls.MovableExpression> ExpressionsToRefresh { get; set; }
public List<MercatorUi.MovableControls.MovablePictureBox> PictureBoxesToRefresh { get; set; }
#endregion
#region méthodes requises par IMovableControl
public void OnAfterRead(EventArgs e)
{
}
public void OnBeforeWrite(EventArgs e)
{
}
public void OnAfterWrite(EventArgs e)
{
}
#endregion
private void button1_Click(object sender, EventArgs e)
{
addItem(sender);
}
private void button2_Click(object sender, EventArgs e)
{
addItem(sender);
}
private void button3_Click(object sender, EventArgs e)
{
addItem(sender);
}
private void addItem(object sender)
{
Button button = (Button)sender;
string s_id = button.Tag.ToString();
MercatorUi.Forms.Billing.BillingForm billingForm = (MercatorUi.Forms.Billing.BillingForm)Form;
MercatorUi.Engine.Gescom.BillingEngine billingEngine = billingForm.BillingEngine;
if (billingEngine.ReadOnly) // si l'utilisateur n'a pas le droit de modifier ce document
return;
int n = billingEngine.AppendLine(true); // le paramètre true permet de ne pas créer une nouvelle ligne si la dernière ligne est vide
if (billingEngine.InsertItem(s_id, billingEngine.LIGNES.Rows[n]))
{
n = billingEngine.AppendLine(); // ajouter une nouvelle ligne vide
billingForm.LinesEditor.Grid.CurrentCell = billingForm.LinesEditor.Grid.Rows[n].Cells[0]; // activer la première cellule de la ligne créée
}
}
}
}
En definitive, l'essentiel du code propre à ce paramétrage se limite à celui qui est dans la méthode addItem.
Le fichier zip ci-joint contient les sources complètes de cette programmation.
A télécharger :
0000002195.zip (11 Kb - 21/03/2023)