Office控件开发总结-开发Windows 窗体控件简单概述
1.1. Windows窗体控件的种类及介绍
Windows 窗体支持三种用户定义的控件:复合、扩展和自定义。
复合控件是通过从 UserControl 类继承创建的控件。复合控件包含与每个包含的 Windows 窗体控件相关联的所有固有功能,允许您有选择地公开和绑定它们的属性。复合控件还提供了大量的默认键盘处理功能,您不需要任何额外的开发。
扩展控件是通过从现有的 Windows 窗体控件类继承创建的控件。此方法使您得以保留 Windows 窗体控件的所有固有功能,然后通过添加自定义属性、方法或其他功能扩展此固有功能。可以使用此选项重写基控件的绘制逻辑,然后更改该控件的外观以扩展其用户界面。
自定义控件是通过从 Control 类继承创建的控件。Control 类提供控件所需的所有基本功能(包括鼠标和键盘处理事件),但不提供控件特定的功能或图形界面。
1.2. 如何对Windows 窗体控件进行属性、方法和事件的定义及执行
以下代码片段为自定义控件OfficeEmbedCtl定义了一个名为RefillVisible的自定义属性。
public partial class OfficeEmbedCtl : UserControl {
...
private bool _refillVisible;
///<summary>
/// 重新填充按钮是否显示
///</summary>
[Category("行为"), Description("重新填充按钮是否显示")]
public bool RefillVisible
{
get
{
return _refillVisible;
}
set
{
_refillVisible = value;
}
}
...
}
以下代码片段说明了OfficeEmbedCtl自定义控件如何定义自定义事件 ValueChanged。
public partial class OfficeEmbedCtl : UserControl {
...
private EventHandler onValueChanged;
///<summary>
/// 值改变时发生
///</summary>
public event EventHandler ValueChanged
{
add
{
onValueChanged += value;
}
remove
{
onValueChanged -= value;
}
}
protected virtual void OnValueChanged(EventArgs e)
{
if (ValueChanged != null)
{
ValueChanged(this, e);
}
}
...
}
1.3. 如何对 Windows 窗体控件进行线程安全调用
以下代码片段说明了OfficeEmbedCtl自定义控件如何对窗体控件进行线程安全调用。
public partial class TemplateForm : BaseForm {
...
private void officeEmbedCtl1_ImportExcelClick(object sender, EventArgs e)
{
Thread thread = new Thread(new ThreadStart(delegate()
{
Invoke(new MethodInvoker(delegate
{
OpenFileDialog file = new OpenFileDialog();
file.Filter = "Excel 工作簿(*.xlsx)|*.xlsx";
if (file.ShowDialog(this) == DialogResult.OK)
{
officeEmbedCtl1.ImportExcel(file.FileName);
}
}));
}));
thread.SetApartmentState(ApartmentState.STA);
thread.Start();
}
...
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· [AI/GPT/综述] AI Agent的设计模式综述