Label défilant

Contenu du snippet

Gestion automatique d'un label défilant en cas de texte dépassant la zone d'affichage

Source / Exemple :


public partial class LabelDefilant : UserControl
    {
        public string LabelText
        {
            get { return this.label.Text; }
            set
            {
                this.label.Text = value;
            }
        }

        public LabelDefilant()
        {
            InitializeComponent();
            this.Resize += new EventHandler(LabelDefilant_Resize);
            this.label.SizeChanged += new EventHandler(label_SizeChanged);
        }

        void LabelDefilant_Resize(object sender, EventArgs e)
        {
            DefilemenLabel();
        }

        void label_SizeChanged(object sender, EventArgs e)
        {
            DefilemenLabel();
        }

        private int _posLabel = 0;

        public int posLabel
        {
            get { return _posLabel; }
            set
            {
                _posLabel = value;
                this.label.Left = _posLabel;
            }
        }
        private bool sens = true;
        private System.Windows.Forms.Timer _timerLabel;

        public System.Windows.Forms.Timer timerLabel
        {
            get
            {
                if (_timerLabel == null)
                {
                    _timerLabel = new System.Windows.Forms.Timer();
                    _timerLabel.Interval = 100;
                    _timerLabel.Tick += new EventHandler(timerLabel_Tick);

                }
                return _timerLabel;
            }
            set { _timerLabel = value; }
        }

        void timerLabel_Tick(object sender, EventArgs e)
        {
            if (sens)
            {
                this.posLabel -= 2;
                if (this.posLabel + this.label.Width < this.Width)
                    sens = false;

            }
            else
            {
                this.posLabel += 2;
                if (this.posLabel >= 0)
                    sens = true;

            }
        }

        private void DefilemenLabel()
        {
            if (this.label.Width > this.Width)
            {
                this.timerLabel.Start();
            }
            else
            {
                this.timerLabel.Stop();
                this.posLabel = 0;
                this.sens = true;
            }
        }
    }

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.