[C#] (Rich)TextBox и TrackBar

Класс для синхронизации значения в TrackBar и (Rich)TextBox. В качестве допустимого интервала берутся minimum и maximum у TrackBar.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;
 
namespace cls
{
    /// <summary>
    /// Класс для связки значений TextBox|RichTextBox и TrackBar.
    /// </summary>
    /// <example>
    ///     <code>
    ///         input_trb_sync t = new input_trb_sync(ref tb, ref trb); // tb, trb - уже объявленные TextBox и TrackBar
    ///     </code>
    /// </example>
    /// <example>
    ///     <code>
    ///         input_trb_sync t = new input_trb_sync(ref rtb, ref trb); // rtb, trb - уже объявленные RichTextBox и TrackBar
    ///     </code>
    /// </example>
    class input_trb_sync
    {
        /// <summary>
        /// связываемый TextBox
        /// </summary>
        private TextBox _tb;
        /// <summary>
        /// связываемый TrackBar
        /// </summary>
        private TrackBar _trb;
        /// <summary>
        /// связываемый RichTextBox
        /// </summary>
        private RichTextBox _rtb;
        /// <summary>
        /// Конструктор c TextBox, TrackBar
        /// </summary>
        /// <param name="tb">TextBox</param>
        /// <param name="trb">TrackBar</param>
        public input_trb_sync(ref TextBox tb, ref TrackBar trb)
        {
            this._tb = tb;
            this._trb = trb;
            this._add_events_tb_trb();
        }
        /// <summary>
        /// Конструктор c RichTextBox, TrackBar
        /// </summary>
        /// <param name="tb">RichTextBox</param>
        /// <param name="trb">TrackBar</param>
        public input_trb_sync(ref RichTextBox rtb, ref TrackBar trb)
        {
            this._rtb = rtb;
            this._trb = trb;
            this._add_events_rtb_trb();
        }
        /// <summary>
        /// Добавление событий для элементов (ввод текста, прокрутка скролла) TextBox, TrackBar
        /// </summary>
        private void _add_events_tb_trb()
        {
            this._trb.Scroll += new EventHandler(_trb_scroll_tb);
            this._tb.TextChanged += new EventHandler(_tb_text_changed);
        }
        /// <summary>
        /// Добавление событий для элементов (ввод текста, прокрутка скролла) RichTextBox, TrackBar
        /// </summary>
        private void _add_events_rtb_trb()
        {
            this._trb.Scroll += new EventHandler(_trb_scroll_rtb);
            this._rtb.TextChanged += new EventHandler(_rtb_text_changed);
        }
        /// <summary>
        /// Метод вызывается при прокрутке скролла
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void _trb_scroll_tb(object sender, EventArgs e)
        {
            this._tb.Text = this._trb.Value.ToString();
        }
        /// <summary>
        /// Метод вызывается при прокрутке скролла
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void _trb_scroll_rtb(object sender, EventArgs e)
        {
            this._rtb.Text = this._trb.Value.ToString();
        }
        /// <summary>
        /// Метод вызывается при вводе текста в TextBox
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void _tb_text_changed(object sender, EventArgs e) 
        {
            // Если текста нет, то не делаем ничего
            if (this._tb.Text.Trim() == String.Empty)
            {
                return;
            }
            // Если в тексте только '-', а в TrackBar можно выбрать отрицательное число, то не делаем ничего
            if (this._tb.Text.Trim() == "-" && this._trb.Minimum >= 0)
            {
                return;
            }
            // Пытаемся перевести строку из TextBox в число
            try
            {
                int v = Convert.ToInt32(this._tb.Text);
                if (v <= this._trb.Maximum)
                {
                    if (v >= this._trb.Minimum)
                    {
                        this._trb.Value = v;
                    }
                    else
                    {
                        this._tb.Text = this._trb.Minimum.ToString();
                    }
                }
                else
                {
                    this._tb.Text = this._trb.Maximum.ToString();
                }
            }
            catch
            {
                // Если в TextBox не число, то в TextBox вводим максимальное значение TrackBar
                this._tb.Text = this._trb.Maximum.ToString();
                return;
            }
        }
        /// <summary>
        /// Метод вызывается при вводе текста в RichTextBox
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void _rtb_text_changed(object sender, EventArgs e)
        {
            // Если текста нет, то не делаем ничего
            if (this._rtb.Text.Trim() == String.Empty)
            {
                return;
            }
            // Если в тексте только '-', а в TrackBar можно выбрать отрицательное число, то не делаем ничего
            if (this._rtb.Text.Trim() == "-" && this._trb.Minimum >= 0)
            {
                return;
            }
            // Пытаемся перевести строку из TextBox в число
            try
            {
                int v = Convert.ToInt32(this._rtb.Text);
                if (v <= this._trb.Maximum)
                {
                    if (v >= this._trb.Minimum)
                    {
                        this._trb.Value = v;
                    }
                    else
                    {
                        this._rtb.Text = this._trb.Minimum.ToString();
                    }
                }
                else
                {
                    this._rtb.Text = this._trb.Maximum.ToString();
                }
            }
            catch
            {
                // Если в TextBox не число, то в RichTextBox вводим максимальное значение TrackBar
                this._rtb.Text = this._trb.Maximum.ToString();
                return;
            }
        }
    }
}

Пример использования:

input_trb_sync t = new input_trb_sync(ref tb_1, ref trb_1);
input_trb_sync t2 = new input_trb_sync(ref rtb_2, ref trb_2);
input_trb_sync t3 = new input_trb_sync(ref tb_3, ref trb_3);
input_trb_sync t4 = new input_trb_sync(ref rtb_4, ref trb_4);

, , ,

Оставить комментарий

Top ↑ | Main page | Back