Avatar billede nejmann Nybegynder
29. august 2006 - 08:46 Der er 3 kommentarer og
1 løsning

Scrolltekst i winform

Hej,

jeg søger en nem måde at lave en scrolltekst på i en winform. Nogle der kender til en komponent der kan dette eller skal man selv igang ved knapperne? og i så fald nogle med gode ideér :)

På forhånd tak!
Avatar billede spif2001 Nybegynder
29. august 2006 - 09:42 #1
Har ikke lige noget info om det, men det har google :)

Lav en søgning med "c# scrolling text" og du får masser af hits.
Avatar billede bulgroz Nybegynder
30. august 2006 - 10:31 #2
Skulle du alligevel have lyst til at lave din egen kontrol selv, så er her et meget simpelt eksempel som jeg lige har griflet ned.

Eksemplet er kun tænkt som ideoplæg, for der er jo mange forskellige måder hvorpå en tekst kan scrolle. Eksemplet er nok det mest simple, som flytter et tegn af gangen, men at udvide det til noget smartere er simpelt.

namespace SimpleMarquee
{
    using System;
    using System.Drawing;
    using System.Windows.Forms;
    using System.ComponentModel;

    /// <summary>
    /// Simple Marquee control.
    /// </summary>
    public class Marquee : System.Windows.Forms.Control
    {
        #region Private Fields

        /// <summary>
        /// The speed of the Marquee.
        /// </summary>
        private int speed = 150;

        /// <summary>
        /// The space inserted at the end of the text.
        /// </summary>
        private int space = 10;

        /// <summary>
        /// Timer used in order to control the speed of the Marquee.
        /// </summary>
        private Timer timer = new Timer();

        /// <summary>
        /// Is the Marquee running?
        /// </summary>
        private bool running;

        /// <summary>
        /// The text to be displayed.
        /// </summary>
        private string scrollText = string.Empty;

        #endregion // Private Fields

        #region Public Constructors

        public Marquee()
        {
            this.timer.Interval = this.Speed;
            this.timer.Enabled = this.Running;
            this.timer.Tick += new EventHandler(this.UpdateMarquee);
        }

        #endregion // Public Constructors

        #region Public Properties

        /// <summary>
        /// Gets or sets the speed of the Marquee.
        /// </summary>
        [Category("Appearance")]
        [DefaultValue(150)]
        public int Speed
        {
            get
            {
                return this.speed;
            }

            set
            {
                this.speed = value;
                this.timer.Interval = value;
            }
        }

        /// <summary>
        /// Gets or sets the space after the text.
        /// </summary>
        [Category("Appearance")]
        [DefaultValue(10)]
        public int Space
        {
            get
            {
                return this.space;
            }

            set
            {
                if (value < 1)
                {
                    throw new ArgumentOutOfRangeException("The space must be grater or equal to 1.");
                }

                this.space = value;
            }
        }

        /// <summary>
        /// Determines if the Marquee is running.
        /// </summary>
        [Category("Appearance")]
        [DefaultValue(false)]
        public bool Running
        {
            get
            {
                return this.running;
            }

            set
            {
                this.running = value;
                this.timer.Enabled = this.running;
            }
        }

        #endregion // Public Properties

        #region Protected Methods

        /// <summary>
        /// Starts or stops the Marquee if clicked.
        /// </summary>
        protected override void OnClick(EventArgs eventArgs)
        {
            this.ToggleMarquee();

            base.OnClick(eventArgs);
        }

        /// <summary>
        /// Override in order to paint the Marquee.
        /// </summary>
        protected override void OnPaint(PaintEventArgs paintEventArgs)
        {
            using (Brush brush = new SolidBrush(this.ForeColor))
            {
                using (Font currentFont = new Font(this.Font.Name, (this.Height * 3) / 4, this.Font.Style, GraphicsUnit.Pixel))
                {
                    paintEventArgs.Graphics.DrawString(this.scrollText, currentFont, brush, 0, 0);
                }
            }

            base.OnPaint(paintEventArgs);
        }

        #endregion // Protected Methods

        #region Private Methods

        /// <summary>
        /// Updates the text in the Marquee.
        /// </summary>
        private void UpdateMarquee( object sender, EventArgs e )
        {
            if(string.IsNullOrEmpty(this.scrollText))
            {
                this.scrollText = this.Text.PadLeft(this.Text.Length + this.Space);
            }

            // Move first character to the end.
            string firstChar = this.scrollText.Substring(0, 1);
            this.scrollText = string.Concat(this.scrollText.Remove(0, 1), firstChar);

            this.Invalidate();
        }

        /// <summary>
        /// Starts and stops the Marquee.
        /// </summary>
        private void ToggleMarquee()
        {
            this.Running = !this.Running;
        }

        #endregion // Private Methods
    }
}
Avatar billede nejmann Nybegynder
12. september 2006 - 21:40 #3
bulgroz: Smid et svar så får du point for indsatsen :)
Avatar billede bulgroz Nybegynder
13. september 2006 - 07:01 #4
Svar...
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester