Урок 17 windows forms. Создание пользовательского элемента управления

Лабораторные работы си шарп. Создание пользовательского элемента управления

Приложения для Windows forms

Лабораторная работа 17

Выполнить: Разработайте элемент управления «Бегущая строка», который прокручивает заданный текст в TextBox справа налево.

Пример выполнения:

[Название проекта: Lesson_17Lab1, название файла L17Lab1.cs]

✍ Выполнение:

1. Создайте новый проект.
2. Для создания пользовательского элемента управления выберите в меню Project (Проект)Добавить пользовательский элемента управления.

Обратите внимание, что у появившегося окна пользовательского элемента нет заголовка и границ, т.к. мы работаем не с формой, а создаем свой элемент управления, который впоследствии будет располагаться на форме другого проекта.

3. В появившемся окне элемента управления добавьте TextBox (txt) и Timer. Чтобы текстовое окно сливалось с формой, установите его свойства: BackColor – в значение Control, BorderStyle – в значение None.
4. Обязательно измените имя элемента управления: вместо UserControl1 введите RunningText (это имя будет затем использовано при создании экземпляров (копий) элемента управления).
5. Далее необходимо запрограммировать событие Resize (изменение размера) для нашего пользовательского элемента управления (в противном случае при размещении элемента управления на форме ширина текстового окна будет неизменной). Для этого выделите элемент и в окне свойств перейдите на вкладку с событиями . Затем из списка событий выберите Resize.
6. Событие Resize происходит каждый раз при изменении размеров нашего элемента управления. Для события необходимо написать следующий код, который увеличивает ширину TextBox на всю доступную ширину элемента управления:

private void RunningText_Resize(object sender, EventArgs e)
        {
            txt.Top = 0;
            txt.Left = 0;
            txt.Width = Width;
            posX = txt.Width;
        }

7. Чтобы новый элемент появился на панели инструментов, запустите проект и затем просто закройте форму. На панели инструментов найдите элемент управления.
8. Перейдите на стандартную форму проекта и расположите на ней элемент управления.
9. Теперь необходимо заставить двигаться надпись (текстовое окно) по элементу, чтобы создать эффект движения строки. Для этого следует в глобальной области описать переменную, которая будет содержать текущую координату Х расположения текстового поля по горизонтали, а в событии Timer поместить следующий код:

public partial class RunningText : UserControl
    {
        int posX;private void timer1_Tick(object sender, EventArgs e)
        {
            txt.Top = 0;
            txt.Left = posX;
            txt.Text = "Привет";
            posX = posX - 20;
            if (posX< 0) {
                posX = txt.Width;
            }
        }

10. Чтобы запустить таймер, установите свойство Enabled таймера в True в событии Load пользовательского элемента :

timer1.Enabled=true;

11. Не забудьте задать для переменной PosX начальное значение. Это необходимо сделать в процедуре события RunningText_Resize:

         posX = txt.Width;

12. Перейдите на форму и, если Вы все сделали правильно, то в элементе управления RunningText строка действительно будет бегущей! Запустите и отладьте приложение.
13. Теперь необходимо добавить возможность изменять слово в бегущей строке. Для этого добавьте на стандартную форму проекта текстовое окно (txt2) и кнопку. По нажатию на кнопку слово, введенное в текстовое окно, должно отображаться в бегущей строке.
14. Для того чтобы можно было выводить любой текст на RunningText, добавим описание глобальной переменной Text в стандартный класс (меню Проект (Project)Добавить новый элементКласс):

internal class Class1
    {
        public string Text = "Привет!";
}

15. Первоначальное значение (значение по умолчанию) для переменной мы задали «Привет!».
16. Теперь создайте метод GetNewString в пользовательском элементе, который будет получать новую строку в качестве параметра и вставлять ее в текстовое поле:

public partial class RunningText : UserControl
    {
        public void GetNewString(string s)
        {
            txt.Text = s;
        }

17. Теперь необходимо заменить код в событии Tick таймера (вместо txt.Text ="Привет!"):

GetNewString(Text);

18. Перейдите в стандартную форму и запрограммируйте событие Click кнопки:

Text = txt2.Text;
runningText1.GetNewString(Text);

19. Запустите проект.
20. Для того чтобы избежать всю эту длительную процедуру с описанием переменной Текст в отдельном классе, можно было бы добавить к нашему элементу управления настоящее свойство Текст. Так и поступим.
21. Перейдите в добавленный класс и удалите там строку с объявлением глобальной переменной:

//public string Text = "Привет!";

22. Для задания нового свойства необходимо добавить в код элемента управления создание нового свойства Text элемента управления:

        public string Text
        {
            set
            {
   txt.Text = value;
                txt.Text = Text;
            }
            get { return txt.Text; }
        }
Это описание говорит нам о том, что создается свойство Text для объекта runningText. Метод Get (получение свойства) позволяет нам “узнать” имеющееся значение текстового поля, а метод Set (установка свойства) позволяет установить значение свойства из внешнего параметра (value).

23. Необходимо убрать (закомментировать) назначение значения свойства текстового окна и вызов методы в событии Tick следующим образом:

            //txt.Text = Text;
            //GetNewString(Text);

24. А в событие Load элемента управления добавить начальное значение текстового поля:

txt.Text = "Привет";

25. На стандартной форме измените код для события Click кнопки:

private void button1_Click(object sender, EventArgs e)
        {
            runningText1.Text= txt2.Text;
        }

26. Обратите внимание, теперь свойство Text является непосредственно созданным Вами свойством Вашего элемента управления.

Контрольное задание:
Добавьте к созданному элементу управления следующее новое свойство Speed (Скорость) (скорость передвижения текста бегущей строки) и соответственно измените приложение для его тестирования.
Вопросы для самоконтроля:
1. Что такое пользовательский элемент управления?
2. Для чего необходимы процедуры Get и Set?
3. Когда выполняется процедура Set (Get)?