C# WinForm如何创建类型别名,切换控件类型时仅需修改一处声明
解决方案
方案1:使用using类型别名(最简便,适配你的需求)
C# 支持通过using关键字为类型定义别名,你只需要声明一次别名,后续所有涉及控件类型的位置都用这个别名,切换控件时仅修改这一行声明即可。
操作步骤:
- 在你的窗体代码文件的最顶部(所有namespace、class声明之前)添加别名声明:
// 后续切换控件仅需修改这一行即可 using GroupControl = System.Windows.Forms.ListView;
如果你的项目使用C# 10及以上版本,还可以添加global修饰符,让这个别名在整个项目所有文件中生效,无需每个文件重复声明:
global using GroupControl = System.Windows.Forms.ListView;
- 将所有原来写
ListView的位置替换为别名GroupControl即可,修改后的代码示例:
private void function1(object sender, EventArgs e) { GroupControl PlaceType = new GroupControl(); GroupControl listview = new GroupControl(); int count2 = autolayoutGroups.Controls.OfType<GroupControl>().ToList().Count(); listview.Size = new System.Drawing.Size(150, 100); listview.BackColor = normalColor; listview.BorderStyle = BorderStyle.Fixed3D; listview.ForeColor = System.Drawing.Color.Black; listview.Name = "Group" + count2; listview.MouseDown += Select; autolayoutGroups.Controls.Add(listview); } private void function2(object sender, EventArgs e) { List<GroupControl> list_of_groups = autolayoutGroups.Controls.OfType<GroupControl>().ToList(); foreach (GroupControl l in list_of_groups) { // 原有逻辑无需修改 } } private void function3(object sender, EventArgs e) { List<GroupControl> list_of_groups = autolayoutGroups.Controls.OfType<GroupControl>().ToList(); foreach (GroupControl l in list_of_groups) { // 原有逻辑无需修改 } }
后续如果要切换为其他控件,比如DataGridView,仅需把顶部的别名声明修改为对应类型即可:
using GroupControl = System.Windows.Forms.DataGridView;
所有相关位置的类型会自动适配,不用逐个修改。
方案2:额外优化(可选)
你可以把创建控件、获取控件集合的通用逻辑封装为公共方法,进一步减少重复代码:
// 封装创建控件的公共逻辑 private GroupControl CreateGroupControl() { int count = autolayoutGroups.Controls.OfType<GroupControl>().Count(); return new GroupControl { Size = new System.Drawing.Size(150, 100), BackColor = normalColor, BorderStyle = BorderStyle.Fixed3D, ForeColor = System.Drawing.Color.Black, Name = "Group" + count }; } // 封装获取控件集合的公共逻辑 private List<GroupControl> GetAllGroupControls() { return autolayoutGroups.Controls.OfType<GroupControl>().ToList(); }
之后你的业务代码可以简化为:
private void function1(object sender, EventArgs e) { var listview = CreateGroupControl(); listview.MouseDown += Select; autolayoutGroups.Controls.Add(listview); } private void function2(object sender, EventArgs e) { foreach (var l in GetAllGroupControls()) { // 原有逻辑无需修改 } }
内容的提问来源于stack exchange,提问作者user16414459
相关产品推荐
相关产品推荐

