从零开始系列,用C#做软件产品:私人日记(三)控件基础

前两篇的内容都是铺垫,今天进入正题。

上一篇我们有提到开发方法,我们采用的是迭代式开发。现在的问题是一个软件有那么多的功能,我们要先从哪里入手?

在这个项目中,我倾向于先做核心功能,有两个好处:

一是核心功能会影响辅助功能,核心功能未完成,很多辅助功能就无法集成调试;

二是相比核心功能,辅助功能的代码量会更多,如果先做辅助功能,一旦核心功能的设想无法实现,辅助功能就会面临重构;先做核心功能可以用少量代码试错,降低风险;

当然上述说法仅限于这个项目。其他项目是没有定式的,辅助功能也完全可以事先定义好接口,模拟数据对接,不然就没法团队开发了。

整个项目最核心就是日记内容的分类、存取与呈现,而内容需要通过分类来检索,分类管理就成为了内容的前置条件。所以,实现内容的分类管理功能,就顺理成章地成为了我们第一个迭代版本的一个小目标。

针对这个小目标简单做下WBS:

从零开始系列,用C#做软件产品:私人日记(三)控件基础

与培训机构相比,图做得略显粗鄙,我就是用Excel表格大概示意下。如果不是为了做教程演示,这个步骤也都可以免了,心里就有数就行。

看上图我们可以知道,小目标下又多了3个小小目标,那么现在一个直击我灵魂的问题来了,上图ABC三个任务,先实现哪个呢?

首先可以排除C,因为C可以看成是A与B的桥梁,桥两端的位置都还没确定,先从桥身建起肯定不合适。至于A和B,哪个先做都一样,正常逻辑是先做B,再做C,最后做A。但我纠结的是如果先做B,Git代码和教程图片是无法同步的,这会影响到教程的效果,所以这里我先做A。

OK,下一个小小目标也确定了:实现分类管理界面。

说到分类管理,首先想到的就是Windows资源管理器,如下面的截图:

从零开始系列,用C#做软件产品:私人日记(三)控件基础

很经典的左树右表形式,也很符合大家的习惯。那我们就参考Windows资源管理器的方式。

接下来再做一下分类管理的WBS,为了方便在后面引用,我们给这些任务按日期编号:

210826-1、位于主界面的左边;

210826-2、分隔栏可以拖动,用以调节左右比例;

210826-3、可随主界面尺寸自动缩放;

210826-4、采用树形控件表示,可显示分类图标;

210826-5、空白区域右键可新建根目录;

210826-6、鼠标右键点击分类项,可弹出管理菜单(新建、修改、删除);操作后自动刷新,删除前提示确认;

210826-7、鼠标左键点击分类项,可查询该分类项中的内容;

以上,就是分类管理界面要实现的功能,其中1-3为尺寸相关功能,4-7为树控件相关功能。

篇幅原因,本节我们只实现1-3的功能,其余功能会在后面的教程中陆续实现。

在正式编码之前,需要先对初次接触windows编程的学员做一下关于控件概念的介绍。

我们在软件界面上经常看到的按钮、输入框、选择框、下拉框等等,这些我们统称它们为控件。所谓控件,就是一个集成了界面、属性、方法、事件等等的类。

界面很好理解,就是我们看到的控件的样子,这是一个具象的东西。但是属性、方法、事件、类各自代表的是什么意思呢?首先这些名称是从英文翻译过来的,没办法,我们看到的绝大多数编程语言都是外国人创立的,这些名称就只是一个代号。

各自的含义我来举个例子大家可能就明白了:

把现实世界中的不同事物抽象成不同的类,这个过程就是面向对象设计。通过面向对象设计,这些类通过各自的属性、方法、事件及程序逻辑交织在一起,进而形成了各种各样的系统,构建出了一个个接近于真实的虚拟世界,这就是编程的魅力。

扯远了,回到我们的小小目标。在.net core(windows应用)开发框架中,提供了大量已经事先封装好了各种属性、方法、事件的通用控件,合理地使用它们,可以极大提升我们的开发效率,我们可以更快的实现我们的小目标。

下面进入代码实操。

一、创建分割栏

在VS中,右上栏的下部标签位置点工具栏,点开All Windows Forms,可以看到所有支持的控件,都是按字母排序的。

从零开始系列,用C#做软件产品:私人日记(三)控件基础

拉动滚动条,找到SplitContainer,然后鼠标左键选中拖到Form1中,当鼠标变成复制图样的时候,松开鼠标。

从零开始系列,用C#做软件产品:私人日记(三)控件基础

你会发现界面就变成下图的样式了:

从零开始系列,用C#做软件产品:私人日记(三)控件基础

此时我们按F5运行程序,把鼠标移动到大致的分割位置,鼠标变成了可拖放的样式,测试发现,已经可以拖放了。210826-2任务就已经完成了,是不是很简单?

这里你可能会有疑问?我是怎么知道在那么多的控件中只用SplitContainer的?这个貌似没什么捷径,只能靠平时积累的经验,用得多了自然就有印象了。我曾经在学习VC++6.0的时候,把所有支持的控件全部都拉出来试下,看看它们到底都是干什么的,不过还好那时候支持的控件并不多。


二、加入树控件,作为分类内容显示容器

既然是分类,肯定是有层级的,那么就用树控件来表示最合适。同样找到TreeView控件,拖到左边的Panel1中。

从零开始系列,用C#做软件产品:私人日记(三)控件基础

放下之后是这样的。鼠标移动小圆圈的位置,可以用拖动以改变树控件的大小。

从零开始系列,用C#做软件产品:私人日记(三)控件基础

然后再按F5运行,如下图效果。

从零开始系列,用C#做软件产品:私人日记(三)控件基础

210826-1也完成了。

然后我们尝试改变一下分割栏的大小、主界面的大小,树控件的大小并没有随之改变,这显然没有达到我们的预期。

从零开始系列,用C#做软件产品:私人日记(三)控件基础

三、控件尺寸锚定

以前(以是多久不记得了),要想控件随界面改变,都要自己手动通过代码计算每个控件的位置,然后通过调用控件的属性或方法来改变。现在有了锚定的方式使这种需求变得相当容易。

点击TreeView控件,右下角的属性窗口。属性窗口有两栏,第一栏是属性名称,第二栏是属性值,我们可以在这里修改属性的默认值。点击某个属性项,最下方会显示这个属性的用法提示。

找到Anchor项,发现默认值是Top和Left,如下图。

从零开始系列,用C#做软件产品:私人日记(三)控件基础

这个是什么意思呢?

字面翻译:Anchor是锚定,Top是上,Left是左。对从来没接触过Anchor的,单靠字面意思比较难理解。

我大概解释下当前设置的意思:就是这个TreeView控件相对于它的父控件,无论父控件尺寸如何变化,左边和上边的距离都保持不变,就像别针一样把左边和上边紧紧的锚在了一起。我们调整窗口大小的方式都是向下或向右,而下和右我们没有锚定,所以自然就不会跟随变化。

理解了原理就简单了,在Anchor属性值位置点下拉箭头,弹出下面的对话框,按下图所示,把下和右也选上。

从零开始系列,用C#做软件产品:私人日记(三)控件基础

我们发现,Anchor的值已经变成了

从零开始系列,用C#做软件产品:私人日记(三)控件基础

再次运行程序,我们发现TreeView控件已经可以跟随主界面大小、分隔栏位置动态调整了。

从零开始系列,用C#做软件产品:私人日记(三)控件基础

至此,210826-3完成。

考虑到篇幅原因,暂时写到这里,下节继续。

提前跟大家说明下,孩子马上要开学了,这几天要搬到新家,下次更新时间可能会稍长。

------------------------------------------------------------

考虑到文章内容的可读性,本篇及以后的教程就不回答提问了,如果有时间我会在评论区做出回复。

------------------------------------------------------------

本教程已作为开源项目加入到Git,代码内容会随教程实时更新,大家有兴趣的话可以关注我,以获得最及时的更新。私信:私人日记 可以来获取Git的链接。

大家阅读过程中有哪些看不懂或未尽兴的地方,可以在评论区留言,我会先记下来在后续的教程中找机会再说。

展开阅读全文

页面更新:2024-03-14

标签:控件   软件产品   属性   界面   私人   大小   核心   位置   目标   事件   代码   人物   功能   基础   方法   项目   教程   日记   系列   内容

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2020-2024 All Rights Reserved. Powered By 71396.com 闽ICP备11008920号-4
闽公网安备35020302034903号

Top