Databinding entre deux controls

Signaler
-
Messages postés
14916
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
25 octobre 2020
-
Bonjour,

J'aimerais que quand on clique sur le bouton enregistrement dans le panel bleu, que l'autre bouton enregistré soit exécuté. En sachant que ce bouton que je souhaite relier est dans un usercontrol situé dans un panel affiché avec un tableLayoutPanel. Et l'autre bouton enregistrement dans le panel bleu se situe dans une form qui est le main.

Du coup dans le main, il y a:

-bindingSourceMain relié au fichier main du projet

-bouton "enregistrement"(panel bleu) relié aux bindingSourceMain

Dans le fichier Alimentation il y a:

-bindingSourceAlim relié à mainBindingSource

-mainBindingSourcerelié au fichier main du projet

-bouton "enregister" relié à mainBindingSource

Et je ne sais pas quoi faire ensuite, car j'ai relié que les propriété autoscroll (car de ce que j'ai compris, on s'en fiche de quelle propriété liée)

Merci de vos retours !

4 réponses

Messages postés
14916
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
25 octobre 2020
447
Bonjour

peux tu montrer comment sont faites ces liaisons?
Bonjour,

je les ai faites avec le concepteur de visual studio et elles sont toutes reliés sur la propriété autoscroll.
Messages postés
14916
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
25 octobre 2020
447
Comment as tu relié un bouton sur une propriété ?

En WPF via une ICommand ok, mais un bindingSource c’est en winform.
oui le fichier main est un winform et l'autre fichier alimentation est un usercontrol

Du coup y a deux buttons que je veux relier, l'un dans le main connecter a bindingSourceMain et l'autre dans le fichier alimentation connecter a mainBindingSource
Messages postés
14916
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
25 octobre 2020
447
Un bouton traite une action quand on clique dessus.
A ma connaissance on ne peut pas binder une action en winform.


Du coup comment faire pour lier ces deux actions qui ce situe dans un fichier différent ?
Messages postés
14916
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
25 octobre 2020
447
Bon, j'ai pas réussi exactement ce que tu veux (enfin je crois).

Je te propose ceci, d'abord la classe métier Truc
    public class Truc
    {
        private static int compteur = 0;

        private int numero;
        public Truc()
        {
            numero = ++compteur;
        }

        public void Action()
        {
            MessageBox.Show(string.Format("{0} sur {1}", numero, compteur));
        }

        public override string ToString()
        {
            return string.Format("Truc numéro {0}", numero);
        }
    }


Ensuite un contrôle Machin, avec un bouton et un label
    public partial class Machin : UserControl, INotifyPropertyChanged  
    {
        public Machin()
        {
            InitializeComponent();
        }

        private Truc truc;

        public Truc LeTruc
        {
            get { return truc; }
            set
            {
                if (truc == value)
                    return;

                truc = value;
                PropertyChanged?.Invoke(this, new PropertyChangedEventArgs("LeTruc"));

                label1.Text = truc.ToString();
            }
        }


        public event PropertyChangedEventHandler PropertyChanged;

        private void button1_Click(object sender, EventArgs e)
        {
            LeTruc.Action();
        }
    }

J'ai pas su binder sur la propriéte LeTruc du contrôle, et donc j'ai fait comme ça
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        List<Truc> trucs;
        private void Form1_Load(object sender, EventArgs e)
        {
            trucs = Enumerable.Range(0, 10).Select(x => new Truc()).ToList();
            trucBindingSource.DataSource = trucs;
        }

        private void button1_Click(object sender, EventArgs e)
        {
            ((Truc)trucBindingSource.Current).Action();
        }

        private void trucBindingSource_CurrentChanged(object sender, EventArgs e)
        {
            machin1.LeTruc = (Truc)trucBindingSource.Current;
        }
    }


Le projet complet https://www.cjoint.com/c/JBBrGG1CbP5

Quand j'étais petit, la mer Morte n'était que malade.
George Burns
Messages postés
14916
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
25 octobre 2020
447
Messages postés
14916
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
25 octobre 2020
447 >
Messages postés
14916
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
25 octobre 2020

Par contre en WPF, c'est possible