Пользовательские компоненты в C# (одиночный компонент и сложный компонент)

  Разработка простых приложений может не требовать создания компонентов. Богатых компонентов C# достаточно, чтобы справиться с большинством идей разработки.

  Немного более сложная разработка приложений, разработка платформ или групповая разработка неизбежно потребуют создания базовых библиотек, что потребует проектирования и разработки множества пользовательских компонентов.

  Компоненты делятся на визуальные и невизуальные, основными из которых здесь являются визуальные компоненты.

  Визуальные компоненты обычно делятся на отдельные компоненты, которые наследуются от отдельного класса и затем разрабатываются; более сложные наследуются от пользовательских компонентов (форм Windows), где можно выполнять богатые функции.

  1. Простые пользовательские компоненты

  Например, я хочу создать кнопку, которая отображает одно состояние (изображение), когда кнопка получает фокус, и отображает другое состояние (изображение), когда теряет фокус. Конечно, я могу установить больше состояний (нажатие мыши). Метод обработки аналогично, конкретный процесс работы:

  1. Сделайте две картинки

  2.Поместить две картинки в проект(файл ресурсов),чтобы их можно было упаковать вместе при компиляции.Можно также оставить их в покое.Их нужно выпустить вместе с файлами программы при их выпуске.

  3. Создайте класс UserButton.cs и напишите код.

  Наследуйте PictureBox, а затем напишите конкретный код:

    public partial class UserButton : PictureBox
    {
        private string imageNormal = "";
        private string imageFocus = "";

        public string ImageNormal
        {
            get { return imageNormal; }
            set
            {
                imageNormal = value;
                //设置正常显示时的图片
                if (!string.IsNullOrEmpty(ImageFocus))
                {
                    Image = Image.FromFile(imageNormal);
                }
            }
        }

        public string ImageFocus
        {
            get { return imageFocus; }
            set
            {
                //设置按钮获取焦点时的图片
                imageFocus = value;
            }
        }

        protected override void OnMouseEnter(EventArgs e)
        {
            base.OnMouseEnter(e);
            //鼠标移入时更换显示图片
            if (!string.IsNullOrEmpty(ImageFocus))
            {
                Image = Image.FromFile(imageFocus);
            }
        }

        protected override void OnMouseLeave(EventArgs e)
        {
            base.OnMouseLeave(e);
            //鼠标移出,失去焦点时恢复默认的图片
            Image = Image.FromFile(imageNormal);
        }

        protected override void OnClick(EventArgs e)
        {
            base.OnClick(e);
            //执行相应的动作
        }
    }

  4. Сгенерируйте, если ошибок нет, вы увидите UserButton в панели инструментов;

  5. Для проверки поместите UserButton в форму и добавьте следующий код в инициализацию формы, чтобы увидеть эффект:

            userButton1.ImageFocus = "D:\\CSharp\\images\\IconSystemFocus.png";
            userButton1.ImageNormal = "D:\\CSharp\\images\\IconSystemNormal.png";

  2. Сложные пользовательские компоненты

  Сложные пользовательские компоненты здесь инкапсулируют множество компонентов Windows или пользовательских компонентов.Эти компоненты могут взаимодействовать друг с другом и с внешними компонентами для выполнения более сложных функций.

  Например, создайте пользовательский компонент поиска, который содержит текстовое поле и настраиваемую кнопку. Конкретные шаги заключаются в следующем:

  1. Создайте новый пользовательский компонент UserSeach и выберите «Пользовательский компонент (форма Windows)»;

  2. Разместите текстовое поле (Textbox) и пользовательский компонент (UserButton);

  3. Доступ к текстовым полям и кнопкам должен осуществляться за пределами пользовательского компонента.

        public UserButton MyUserButton {
            get { return userButton1; }
        }
        public TextBox MyTextbox {
            get { return textBox1; }
        }

  4. Соответствующее событие нажатия кнопки требуется вне пользовательского компонента, определяемое как:

       public event EventHandler MyUserButtonClicked;

        private void userButton1_Click(object sender, EventArgs e)
        {
            //在用户组件内的响应处理;
            MyUserButtonClicked?.Invoke(this,EventArgs.Empty);
        }

  5. Сгенерировать, если ошибок нет, в панели инструментов появится пользовательский компонент UserSeach;

  6. Поместите пользовательский компонент UserSeach в форму и напишите код:

  ⑴ Определить в форме

        UserButton mineUserButton;
        TextBox mineTextbox;

  ⑵ Определите реакцию события кнопки:

        private void UserSreach1_MyUserButtonClicked(object? sender, EventArgs e)
        {
            MessageBox.Show("响应代码");
        }

  ⑶Выполните присвоение значений и монтирование событий во время инициализации формы:

            mineUserButton = userSreach1.MyUserButton;
            mineTextbox = userSreach1.MyTextbox;
            
            mineUserButton.ImageFocus= "D:\\CSharp\\IconSystemFocus.png";
            mineUserButton.ImageNormal = "D:\\CSharp\\IconSystemNormal.png";
            userSreach1.MyUserButtonClicked += UserSreach1_MyUserButtonClicked;

  7. Вы можете увидеть правильный эффект.

  При использовании PowerBuilder в 1998 году часто использовались пользовательские компоненты. Их было 5 типов, три невизуальных (одиночные, сложные, написанные WatcomC), два визуальных (одиночные, сложные), сделанные пользовательские Компоненты очень удобны и могут быть используются без компиляции.Они быстрые и удобные.Единственное, что следует отметить, это то, что при редактировании пользовательского компонента нельзя открыть форму или компонент с вложенным пользовательским компонентом.

  Также очень удобно элементам управления в компоненте взаимодействовать с внешним миром.Вы можете настроить промежуточное событие как мост.Элементы управления в компоненте запускают это промежуточное событие.Применяя его в форме, вы можете писать код напрямую в промежуточном событии.

추천

출처blog.csdn.net/dawn0718/article/details/131484619