SunnyUI.Net是一款针对C# .Net WinForm平台设计的开源控件库,它提供了丰富的UI元素和实用的工具类库,旨在简化Windows桌面应用程序的开发工作,提高开发效率。这款框架不仅包含了基础的控件扩展,还集成了多页面开发机制,为开发者带来更加便捷的编程体验。 一、SunnyUI.Net控件库 SunnyUI.Net的核心是其丰富的控件库,其中包括但不限于: 1. 自定义按钮:提供多种风格的按钮,如扁平化、圆角等,以满足不同设计需求。 2. 数据输入控件:包括自定义文本框、日期选择器、下拉列表等,优化了UI交互和数据验证功能。 3. 表格控件:支持自定义列宽、行高,以及丰富的数据编辑和筛选功能。 4. 树形视图:支持多层结构,方便展示和操作复杂的数据层次关系。 5. 图标和图片控件:提供多种图标选择和图片显示方式,增强界面美观度。 6. 进度条和滑块:动态反馈操作进度,增强用户体验。 二、工具类库与扩展类库 SunnyUI.Net的工具类库包含了各种常用的辅助函数,如: 1. 字符串处理:提供字符串格式化、加密解密、截取、替换等方法。 2. 数字与日期时间:方便进行数字运算、日期时间转换和比较。 3. 文件操作:支持文件的读写、复制、删除等操作。 4. 网络通信:提供HTTP、FTP等网络请求接口,便于进行数据交换。 5. 日志记录:方便开发者追踪程序运行状态,调试和定位问题。 扩展类库则对.NET Framework的基础类进行了增强,例如: 1. 对象序列化:提供了更易用的序列化和反序列化功能。 2. 线程安全:对线程锁、线程池等进行了封装,简化并发编程。 3. 配置管理:方便地读写配置文件,支持动态更改配置。 4. 错误处理:提供统一的异常处理机制,便于全局错误捕获和处理。 三、多页面开发框架 SunnyUI.Net的多页面开发框架允许开发者轻松构建具有多个工作空间的应用程序,每个工作空间可以独立承载不同的功能模块。框架特点包括: 1. 页面管理:支持动态加载和卸载页面,减少内存占用。 2. 标签切换:用户可以方便地在多个页面间切换,提升操作流畅性。 3. 数据共享:实现页面间数据的传递和共享,提高程序协同性。 4. 响应式设计:适应不同分辨率的屏幕,自动调整布局。 四、开源优势 作为开源项目,SunnyUI.Net具有以下优点: 1. 社区支持:开发者可以通过社区获取帮助,分享经验,共同进步。 2. 持续更新:开发者可以根据社区反馈不断改进和扩展框架功能。 3. 自由定制:可根据项目需求进行二次开发,满足个性化需求。 4. 免费使用:开源协议下的免费授权,降低了开发成本。 SunnyUI.Net为C# .Net WinForm应用开发提供了全面的解决方案,不仅包含丰富的控件和工具,还具备强大的多页面框架,有助于开发者快速构建高效、美观的桌面应用。同时,开源属性使得它更具灵活性和可持续性。通过学习和使用SunnyUI.Net,开发者能够提升开发效率,打造优质的WinForm应用程序。
2025-07-31 10:25:12 3.6MB SunnyUI WinForm
1
在C# WinForm开发中,有时我们希望为窗体添加一些高级视觉效果,例如像现代操作系统中的窗口那样,带有四周的阴影。这个效果可以提升应用的用户体验,使其看起来更加专业和精致。本教程将详细讲解如何在WinForm取消默认边框后,实现窗体四周的阴影效果。 我们需要理解实现阴影效果的基本原理。阴影通常是由底层图形API或自定义绘制来创建的,这里我们使用双层窗体结构:一层用于显示正常的窗体内容,另一层则用于绘制阴影。这种方式可以确保阴影不影响到窗体上的控件交互。 以下是实现这一效果的关键步骤: 1. **创建两个窗体**: - 主窗体(MainForm):包含所有控件和应用程序的主要逻辑。 - 阴影窗体(ShadowForm):用来绘制阴影效果,通常设置为透明,以保持主窗体内容的可见性。 2. **取消主窗体的默认边框**: 在`MainForm`的设计界面或代码中,取消窗体的边框样式,如`FormBorderStyle = FormBorderStyle.None`,以使窗体无边框并能自由移动。 3. **自定义阴影窗体**: - 创建`ShadowForm`类,继承自`Form`,并在其中重写`OnPaint`事件,以绘制阴影。阴影可以通过渐变色、模糊效果等方式实现,具体取决于设计需求。 - 设置`ShadowForm`的透明度,通常使用`Opacity`属性来调整,以便阴影既明显又不影响主窗体内容。 4. **同步主窗体和阴影窗体的位置与大小**: - 当主窗体的位置或大小改变时,需要同步更新阴影窗体的位置和大小。这可以通过监听`MainForm`的`LocationChanged`和`SizeChanged`事件来实现。 - 在事件处理程序中,根据主窗体的位置和大小计算出阴影窗体的位置和大小,然后设置`ShadowForm`的相应属性。 5. **显示阴影窗体**: - 在`MainForm`的`Load`事件或其他适当的时间点,实例化`ShadowForm`并将其设置为`TopLevel = false`,以防止它接管鼠标事件。 - 将`ShadowForm`放置在`MainForm`下方,并设置适当的Z顺序,使其始终位于主窗体之下。 6. **处理窗体移动和关闭**: - 要允许无边框的`MainForm`可移动,可以监听鼠标点击事件,然后使用`SetDesktopLocation`方法手动调整窗体位置。 - 当主窗体关闭时,记得也要关闭`ShadowForm`,以保持程序的整洁。 通过以上步骤,我们可以成功地在WinForm应用中实现一个动态跟随主窗体的阴影效果。需要注意的是,虽然Windows Forms提供了丰富的功能,但其图形渲染能力相比WPF等其他技术可能有所不足,因此在实现复杂视觉效果时可能会遇到一些限制。不过,对于基本的阴影效果,以上方案已经足够实用。 为了更好地理解和实践这个效果,你可以从提供的压缩包文件“C#WinForm窗体四周阴影效果”中获取示例代码,根据代码结构和注释进行学习和调试。这将帮助你更深入地掌握这个技术,并能将其应用到自己的项目中。
2025-07-30 23:16:15 82KB WinForm 阴影效果
1
在web页面上我们可以通过frameset,iframe嵌套框架很容易实现各种导航+内容的布局界面,而在winform、WPF中实现其实也很容易,通过本文给大家介绍在winform下实现左右布局多窗口界面的方法,本文介绍的非常详细,对winform布局相关知识感兴趣的朋友一起学习吧 在WinForms开发中,创建一个左右布局的多窗口界面是一个常见的需求,这使得用户界面更加友好和高效。本文将详细讲解如何在WinForms环境中实现这样的布局,并提供关键代码示例。 我们要知道在Web开发中,我们可以使用frameset和iframe来构建复杂的布局,但在WinForms或WPF应用中,我们需要利用不同的控件和机制来实现类似的效果。对于WinForms,我们可以利用MDI(Multiple Document Interface)特性来创建多窗口界面。 MDI允许在一个父窗口(MDI Container)内嵌入多个子窗口(MDI Child Forms)。要设置一个窗体作为MDI Container,只需将窗体的`IsMdiContainer`属性设置为`true`。而子窗体的`MdiParent`属性则应设置为MDI Container窗体的实例,这样子窗体就会在MDI Container中显示。 以下是一个简单的MDI布局示例代码: ```csharp public partial class FormMdi : Form { private int formCount = 0; public FormMdi() { InitializeComponent(); this.menuStrip1.MdiWindowListItem = this.windowsToolStripMenuItem; } private void newToolStripMenuItem_Click(object sender, EventArgs e) { ShowChildForm(); } private void ShowChildForm() where TForm : Form, new() { TForm childForm = new TForm(); childForm.Name = "frm" + Guid.NewGuid().ToString("N"); childForm.Text = $"Child Form -{++formCount}"; childForm.MdiParent = this; childForm.WindowState = FormWindowState.Maximized; childForm.Show(); } } ``` 为了实现左右布局,我们可以使用`SplitContainer`控件。`SplitContainer`提供了两个面板(Panel1和Panel2),可以调整它们之间的分隔条,从而改变左右两部分的宽度。在这个例子中,通常会在左侧的Panel1中放置一个树形视图或导航菜单,右侧的Panel2则作为子窗口的容器。 界面设计完成后,我们需要实现以下两个关键功能: 1. 在右侧Panel2中显示子窗口: ```csharp private void ShowChildForm() where TForm : Form, new() { TForm childForm = new TForm(); // ... (其余代码不变) childForm.Parent = splitContainer1.Panel2; // ... (其余代码不变) } ``` 这里,我们将子窗体的`Parent`属性设置为`splitContainer1.Panel2`,而不是设置`MdiParent`,因为子窗体不再作为MDI Child,而是直接作为SplitContainer的子控件。 2. 实现动态调整左右占比功能: 用户可以通过拖动`SplitContainer`的分隔条来调整左右两部分的大小。`SplitContainer`会自动处理这一功能,无需额外的代码。 同时,为了显示已打开的子窗口,我们可以使用`MenuStrip`控件,将其`MdiWindowListItem`属性设置为一个菜单项,这样菜单项会自动更新,反映当前所有活动的子窗口。例如: ```csharp this.menuStrip1.MdiWindowListItem = this.windowsToolStripMenuItem; ``` 以上就是实现WinForms下左右布局多窗口界面的基本步骤。通过结合MDI Container和SplitContainer控件,我们可以轻松创建一个具有导航和内容区的用户界面。这不仅适用于新手学习,也为有经验的开发者提供了一个简洁的实现方式。
2025-07-15 13:23:07 216KB winform布局 c_winform布局
1
winform 程序调用Windows.Devices.Bluetoot API 实现windows下BLE蓝牙设备自动连接,收发数据功能。不需要使用win10的UWP开发。 实际例子用vs2022编写,可直接编译运行
2025-07-12 15:32:10 2.39MB windows .net 开发语言
1
ASP.NET编程知识之GMap.Net地图插件在WinForm和WPF中的应用 GMap.Net是一款功能强大且灵活的地图插件,它可以在WinForm和WPF应用程序中使用,以提供丰富的地图显示和交互功能。下面我们将详细介绍如何在WinForm和WPF中使用GMap.Net地图插件。 一、GMap.Net简介 GMap.Net是一款开源的地图插件,提供了丰富的地图显示和交互功能,支持多种地图提供商,如Google Maps、Bing Maps、Yahoo Maps等。GMap.Net支持WinForm和WPF应用程序,并提供了详细的文档和示例代码,帮助开发者快速上手。 二、在WinForm中使用GMap.Net 要在WinForm中使用GMap.Net,需要首先下载GMap.Net的源代码,并编译三个核心项目:GMap.Net.Core、GMap.Net.WindowsForms和GMap.Net.WindowsPresentation。然后,在WinForm项目中添加对GMap.Net.Core.DLL和GMap.Net.WindowsForms.DLL的引用。 接下来,需要创建一个UserControl,并继承自GMapControl,以便在WinForm中显示地图。例如: ```csharp namespace GMapWinFormDemo { public partial class MapControl : GMapControl { public MapControl() { InitializeComponent(); } } } ``` 在主Form中,需要添加相关的代码,以便显示地图和处理交互事件。例如: ```csharp namespace GMapWPFDemo { public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); try { System.Net.IPHostEntry e = System.Net.Dns.GetHostEntry("www.google.com.hk"); } catch { mapControl.Manager.Mode = AccessMode.CacheOnly; MessageBox.Show("No internet connection available, going to CacheOnly mode.", "GMap.NET Demo", MessageBoxButton.OK, MessageBoxImage.Warning); } mapControl.MapProvider = GMapProviders.GoogleChinaMap; //google china 地图 mapControl.MinZoom = 2; //最小缩放 mapControl.MaxZoom = 17; //最大缩放 mapControl.Zoom = 5; //当前缩放 mapControl.ShowCenter = false; //不显示中心十字点 mapControl.DragButton = MouseButton.Left; //左键拖拽地图 mapControl.Position = new PointLatLng(32.064, 118.704); //地图中心位置:南京 mapControl.OnMapZoomChanged += new MapZoomChanged(mapControl_OnMapZoomChanged); mapControl.MouseLeftButtonDown += new MouseButtonEventHandler(mapControl_MouseLeftButtonDown); } } } ``` 三、在WPF中使用GMap.Net 在WPF中使用GMap.Net与WinForm中使用类似,需要首先下载GMap.Net的源代码,并编译三个核心项目:GMap.Net.Core、GMap.Net.WindowsForms和GMap.Net.WindowsPresentation。然后,在WPF项目中添加对GMap.Net.Core.DLL和GMap.Net.WindowsPresentation.DLL的引用。 接下来,需要创建一个UserControl,并继承自GMapControl,以便在WPF中显示地图。例如: ```csharp namespace GMapWPFDemo { public partial class MapControl : GMapControl { public MapControl() { InitializeComponent(); } } } ``` 在主Window中,需要添加相关的代码,以便显示地图和处理交互事件。例如: ```csharp namespace GMapWPFDemo { public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); try { System.Net.IPHostEntry e = System.Net.Dns.GetHostEntry("www.google.com.hk"); } catch { mapControl.Manager.Mode = AccessMode.CacheOnly; MessageBox.Show("No internet connection available, going to CacheOnly mode.", "GMap.NET Demo", MessageBoxButton.OK, MessageBoxImage.Warning); } mapControl.MapProvider = GMapProviders.GoogleChinaMap; //google china 地图 mapControl.MinZoom = 2; //最小缩放 mapControl.MaxZoom = 17; //最大缩放 mapControl.Zoom = 5; //当前缩放 mapControl.ShowCenter = false; //不显示中心十字点 mapControl.DragButton = MouseButton.Left; //左键拖拽地图 mapControl.Position = new PointLatLng(32.064, 118.704); //地图中心位置:南京 mapControl.OnMapZoomChanged += new MapZoomChanged(mapControl_OnMapZoomChanged); mapControl.MouseLeftButtonDown += new MouseButtonEventHandler(mapControl_MouseLeftButtonDown); } } } ``` 四、GMap.Net的优点和缺点 GMap.Net的优点包括: * 支持多种地图提供商 * 提供了丰富的地图显示和交互功能 * 支持WinForm和WPF应用程序 * 提供了详细的文档和示例代码 GMap.Net的缺点包括: * 需要编译三个核心项目 * 需要添加对DLL的引用 * 需要创建UserControl并继承自GMapControl GMap.Net是一款功能强大且灵活的地图插件,可以在WinForm和WPF应用程序中使用,以提供丰富的地图显示和交互功能。
2025-07-01 13:32:42 18KB asp.net 编程语言 wpf .net
1
在本文中,我们将深入探讨如何使用C#编程语言和WinForm框架来实现一个基础的登录与注册功能。WinForm是.NET Framework提供的一种用于构建桌面应用的用户界面工具,而C#则是微软开发的一种面向对象的编程语言,非常适合用于Windows应用程序的开发。 让我们了解WinForm中的基本组件。在创建登录注册功能时,你需要使用到的控件可能包括TextBox(文本框)用于输入用户名和密码,Button(按钮)用于执行操作,Label(标签)显示提示信息,也许还会用到CheckBox(复选框)来记住用户信息或者RadioButton(单选按钮)来切换注册与登录界面。 1. **设计界面**: 使用Visual Studio或其他.NET IDE,你可以拖放这些控件到WinForm的设计视图中,并调整它们的大小和位置。别忘了设置控件的属性,如Text、ForeColor、Font等,以符合用户界面的视觉效果。 2. **事件处理**: 按钮的Click事件是你需要关注的主要事件。当用户点击“登录”或“注册”按钮时,你需要编写对应的代码来处理用户输入并执行相应的逻辑。例如,对于登录按钮,你需要验证用户名和密码是否匹配数据库中的记录;对于注册按钮,你需要将新用户的信息存储到数据库中。 3. **数据库连接**: 这个项目使用了"连接数据库"这一标签,意味着我们需要与数据库进行交互。C#提供了ADO.NET库,通过SqlConnection类可以连接到SQL Server数据库。你需要创建一个数据库连接字符串,并使用SqlCommand类来执行SQL语句,如SELECT(用于查询)和INSERT(用于插入新用户)。 4. **数据验证**: 在用户尝试登录或注册时,确保对输入的数据进行验证。这包括检查用户名是否为空,密码是否符合复杂性要求,以及在注册时确认用户名的独特性。可以使用Regex类来检查密码的复杂性,或者使用SQL的DISTINCT关键字来检查用户名的唯一性。 5. **错误处理**: 编程中,异常处理是必不可少的一部分。当数据库连接失败,SQL查询出错,或用户输入不合法时,你需要捕获异常并显示相应的错误信息。使用try-catch块可以有效地处理这些异常情况。 6. **用户体验**: 提供良好的用户体验,比如在用户输入时即时反馈(如密码可见/不可见切换,输入错误提示),以及使用对话框来确认重要操作(如删除用户)。 7. **安全性**: 虽然这个项目可能是学习用途,但安全问题不容忽视。密码不应明文存储,而是应该使用哈希函数进行加密。此外,避免SQL注入攻击,确保所有的数据库查询参数化。 通过以上步骤,你将能够创建一个简单的WinForm登录注册系统。这个系统虽小,但它涵盖了C#编程、数据库交互和用户界面设计等多个关键领域,对于初学者来说是一个很好的实践项目。在实际项目中,还需要考虑更多的细节,如性能优化、多线程、数据持久化等,但这已经足够让你开始你的编程之旅了。
2025-06-21 14:25:17 70KB WinForm
1
在C# WinForm开发中,用户界面的交互性是至关重要的。`ListBox`控件是常用的展示列表数据的组件,但默认情况下它不支持直接通过拖拽来改变条目的顺序。本示例将介绍如何为`ListBox`添加拖拽排序功能,使用户能够更直观、便捷地对列表进行排序。 我们需要在`Form1.cs`文件中定义`ListBox`控件,并为其设置一些基本属性,如`SelectionMode`和`AllowDrop`。`SelectionMode`应设置为`SelectionMode.MultiExtended`,这样用户可以选中多个项目;`AllowDrop`应设置为`true`,以便允许拖放操作。 ```csharp public partial class Form1 : Form { public Form1() { InitializeComponent(); listBox1.SelectionMode = SelectionMode.MultiExtended; listBox1.AllowDrop = true; } } ``` 接下来,我们需要处理几个关键的事件:`DragEnter`, `DragLeave`, `DragOver`, 和 `Drop`。这些事件会在用户拖动鼠标时触发,帮助我们实现拖拽排序的功能。 在`DragEnter`事件中,我们将检查数据是否可以被拖放到`ListBox`中。如果是,我们将设置`DragEffect`为`DragDropEffects.Move`,表示可以移动项目。 ```csharp private void listBox1_DragEnter(object sender, DragEventArgs e) { if (e.Data.GetDataPresent(typeof(string))) { e.Effect = DragDropEffects.Move; } else { e.Effect = DragDropEffects.None; } } ``` `DragOver`事件用于更新鼠标下方项的位置。我们需要计算出鼠标的相对位置,并调整`ListBox`的选中项。 ```csharp private void listBox1_DragOver(object sender, DragEventArgs e) { Point mousePosition = Control.MousePosition; Point controlPoint = listBox1.PointToClient(mousePosition); int index = listBox1.IndexFromPoint(controlPoint); // 防止越界 if (index < 0) index = 0; else if (index > listBox1.Items.Count - 1) index = listBox1.Items.Count - 1; // 如果当前选中的项和新位置不同,更新选中项 if (listBox1.SelectedIndex != index) { listBox1.SelectedIndex = index; } } ``` 在`Drop`事件中,我们实际上执行了项目的移动操作。我们获取到被拖放的数据,然后交换当前选中项和新位置的项。 ```csharp private void listBox1_Drop(object sender, DragEventArgs e) { if (e.Data.GetDataPresent(typeof(string))) { string[] data = (string[])e.Data.GetData(typeof(string)); int currentIndex = listBox1.SelectedIndex; listBox1.Items[currentIndex] = listBox1.Items[index]; listBox1.Items[index] = data[0]; listBox1.SelectedIndex = index; } } ``` 同时,为了启动拖放操作,我们还需要在`ListBox`的`MouseDown`事件中设置`DoDragDrop`,以便在用户点击并拖动时开始拖放。 ```csharp private void listBox1_MouseDown(object sender, MouseEventArgs e) { if (e.Button == MouseButtons.Left && listBox1.SelectedItem != null) { string[] selectedItems = new string[listBox1.SelectedItems.Count]; listBox1.SelectedItems.CopyTo(selectedItems, 0); listBox1.DoDragDrop(selectedItems, DragDropEffects.Move); } } ``` 以上代码实现了一个基本的`ListBox`拖拽排序功能。在`Form1.Designer.cs`中,你需要确保`listBox1`已经被正确初始化,并且在`InitializeComponent`方法中调用了上面的事件处理器。 `Program.cs`文件通常包含了应用程序的主入口点,`WindowsFormsApplication1.csproj`是项目文件,而`Form1.resx`和`Properties`文件夹则包含了窗体资源和其他配置信息,这些文件在实现拖拽排序功能中并不直接涉及。 通过处理`ListBox`控件的相关事件,我们可以为用户提供一种直观的交互方式,让他们通过拖拽来轻松调整列表的顺序。这种增强的用户体验使得C# WinForm应用更加符合现代软件设计的要求。
2025-06-19 17:38:14 10KB winform ListBox
1
这个档案管理系统中用到了树形目录,使用人员需要随时调整左侧的目录,考虑到使用数据库的比较繁琐,就想到了一个方法,即可以在客户端编辑左侧的那个目录,保存成一个xml文件。修改完成后需要的话可以把这个xml文件上传到服务器,其他人员可以从服务器加载这个xml文件。虽然简单,但也比较好的满足了朋友的需求。今天刚好有时间,把左侧目录的编辑页面提取出来。共享给大家。这个XML编辑器是我从csdn上下载的,具体地址也忘记了,然后修改了下,一直在使用,感谢原作者。
2025-06-18 13:42:49 128KB 菜单编辑器
1
在.NET框架中,WinForm(Windows Forms)是用于构建桌面应用程序的用户界面的库,而WebService则是一种基于HTTP协议的网络服务,允许不同系统间的数据交换。本资源提供了使用WinForm创建简单WebService的源码,这对于我们理解如何将这两者结合以及如何在本地应用中实现Web服务的调用非常有帮助。 创建一个简单的WebService通常涉及以下步骤: 1. **创建WebService项目**:你需要在Visual Studio中创建一个新的ASP.NET Web Application项目,并选择"ASP.NET Web服务(.NET Framework)"模板。 2. **定义服务方法**:在新创建的WebService项目中,会有一个默认的.asmx文件,其中包含一个名为`HelloWorld`的示例方法。你可以根据需求添加自己的业务逻辑方法。例如,可以创建一个名为`GetWeatherData`的方法,接收城市名参数并返回该城市的天气信息。 ```csharp [WebMethod] public string GetWeatherData(string city) { // 这里编写获取天气数据的代码 } ``` 3. **实现服务逻辑**:在上述`GetWeatherData`方法内,你需要实现获取天气数据的具体逻辑。这可能涉及到与远程API的交互,或者从数据库查询数据。 4. **测试WebService**:在Visual Studio中,可以直接通过调试器运行WebService,然后在浏览器中访问`http://localhost:port/YourService.asmx`来查看可用的服务方法和测试它们。点击每个方法后面的链接,可以看到一个测试页面,你可以输入参数并执行服务。 5. **在WinForm中调用WebService**:现在,让我们在WinForm应用中调用这个WebService。右键点击解决方案资源管理器中的项目,选择"添加引用",然后添加对你的WebService项目的引用。接着,创建一个控件(如Button)并在其Click事件中调用WebService: ```csharp private void button1_Click(object sender, EventArgs e) { YourWebService.Service1 ws = new YourWebService.Service1(); string weatherInfo = ws.GetWeatherData(textBox1.Text); label1.Text = weatherInfo; } ``` 在这个例子中,用户在文本框中输入城市名,点击按钮后,WinForm应用会调用WebService的`GetWeatherData`方法,获取天气信息,并将其显示在Label控件上。 6. **处理异常和错误**:在实际应用中,还需要考虑异常处理和错误显示,确保即使WebService调用失败,用户也能得到适当的反馈。 7. **部署与发布**:当WebService开发完成后,你需要将其部署到IIS服务器或云平台上,以便其他应用能够访问。 这个资源中的源码应该包含了上述部分或全部步骤的实现,通过学习和研究这些代码,你将能够掌握在WinForm应用中创建和使用WebService的基本技能。对于初学者来说,这是一个很好的实践项目,可以帮助加深对.NET Web服务和WinForm交互的理解。
2025-06-11 20:02:19 2KB winform
1
C# WinForm 工作中遇到一个需要将界面表格数据按照设定的格式[表头|列表|表尾]导出到Excel文件,因为格式繁多一个个固定代码编写很不现实,网上找了很久都没有相关的功能实例,于是就加班自己动手写了一个通用的导出实例,已应用到代码中。现为方便广大开发者遍历特上传通用精简版分享给大家 如有优化建议和方向的同志可以加Q:398719557 一起交流学习进步 待解决问题: 1.界面设计时合并单元格问题(导出已合并)方便编辑模板 2.导出单元格背景色问题 完整版还有自动反射字段中文名称方便客户自己编辑 时间匆忙就懒得分离代码上传 了 原理很简单 字段自定义属性[PropertyDescriptor] 然后反射就好了
1