Разработка простых приложений может не требовать создания компонентов. Богатых компонентов 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), два визуальных (одиночные, сложные), сделанные пользовательские Компоненты очень удобны и могут быть используются без компиляции.Они быстрые и удобные.Единственное, что следует отметить, это то, что при редактировании пользовательского компонента нельзя открыть форму или компонент с вложенным пользовательским компонентом.
Также очень удобно элементам управления в компоненте взаимодействовать с внешним миром.Вы можете настроить промежуточное событие как мост.Элементы управления в компоненте запускают это промежуточное событие.Применяя его в форме, вы можете писать код напрямую в промежуточном событии.