首页 文章 精选 留言 我的

精选列表

搜索[c/c ],共10000篇文章
优秀的个人博客,低调大师

C#语法-虚方法详解 Virtual 虚函数

虚方法 / Virtual 本文提供全流程,中文翻译。 Chinar 坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 —— 高分辨率用户请根据需求调整网页缩放比例) Chinar —— 心分享、心创新!助力快速理解 虚方法 的用法为新手节省宝贵的时间,避免采坑! 1 Virtual Method —— 虚方法 2 Parent Class:Enemy —— 父类:总敌人类 3 Subclass:Boss ——子类:首领 4 Subclass:Enemy1、Enemy2 ——子类:敌人1、敌人2 5 Test Main ——主入口:测试 支持 May Be —— 搞开发,总有一天要做的事! 全文高清图片,点击即可放大观看 (很多人竟然不知道) 1 Virtual Method —— 虚方法 这里我们来详细说说: 虚方法/虚函数 通过简单的例子,来说明虚方法是个什么东西 虚方法,可以理解为 “一个不完整”/“可以扩展” 的方法 Virtual (虚)与 Override (重写) 是同时出现的 在子类中,重写 Override (重写)虚方法时,父类中的函数才会被重写 在子类中,重写时,写明了 base ,并重写时,子类基于父类函数进行扩展 3个子类,同时继承一个父类 那么父类中的函数,子类都将拥有 用中国的老话 “推翻重来”理解,很是合适 加 base 后可以理解为: 老子会什么,儿子通过努力(重写),比老子会的更多/会的不一样 2 Parent Class:Enemy —— 父类:总敌人类 我们以控制台程序,来举个例子 Enemy —— 敌人类,可以包含很多种敌人的,父类/总类 我们在其中写一些,普通方法 以及 虚方法 using System; /// <summary> /// 这里明明空间用中文,便于新手理解(请不要学我) /// </summary> namespace 虚方法 { /// <summary> /// 敌人大类 /// </summary> class Enemy { /// <summary> /// 普通方法:智能系统 /// </summary> public void Ai() { Console.WriteLine("父类怪物智能系统"); Move(); } /// <summary> /// 虚方法:移动 /// </summary> public virtual void Move() { Console.WriteLine("父类怪物移动方法"); } /// <summary> /// 虚方法:打脸 /// </summary> public virtual void 打脸() { Console.WriteLine("父类打脸"); } private float hp; private float speed; public float Speed //速度 { get { return speed; } set { speed = value; } } public float Hp //血量 { get { return hp; } set { hp = value; } } } } 3 Subclass:Boss ——子类:首领 Boss —— 首领:属于怪物的一种,同样属于敌人,所以可以继承 Enemy 敌人类 new 关键字,由于子类中 Move 函数名,与父类中 Move 函数名相同 所以用 new 关键词修饰,用以区分,并隐藏父类中 Move 方法 using System; namespace 虚方法 { /// <summary> /// 首领:也属于敌人 所以继承敌人类 /// </summary> class Boss : Enemy { //子类里重写虚函数后,不论在哪里调用,都是调用重写后的 Move方法 //例如 Boss b=new Boss(); b.Ai()调用的Move方法,就是重写虚函数中 下边这个Move方法 //而不是父类中的 Move public new void Move() { Console.WriteLine("这是子类-Boss的移动方法"); } public void Attack() { Console.WriteLine("子类-Boss正在猛烈的摇晃"); Move(); } } } 4 Subclass:Enemy1、Enemy2 ——子类:敌人1、敌人2 Enemy1、Enemy2 —— 代表两种敌人类型:属于怪物的一种,同样属于敌人,所以可以继承 Enemy 敌人类 当你见到 Override 关键字,你的第一印象就应该想到,这个函数被重写了 当你见到 Override 并且,函数体中包含 base.相同的函数名,那就代表着 :这个函数是基于父类函数重写/扩展的 using System; namespace 虚方法 { /// <summary> /// 第一种敌人 /// </summary> class Enemy1 : Enemy { /// <summary> /// 这里因为没有 base,所以子类中的Move 就是下面一句代码 /// 父类中的Move,在当前类中就不存在了。因为在子类中重写了 /// </summary> public override void Move() { Console.WriteLine("这是子类-Enemy1的移动方法"); } } /// <summary> /// 第二种敌人 /// </summary> class Enemy2 : Enemy { /// <summary> /// 重写 Move 移动函数 /// </summary> public override void Move() { base.Move(); //base. —— 在原有的基础上,新增方法(也就是进行扩展,父类的函数体 依旧具备) Console.WriteLine("这是子类-Enemy2的移动方法"); //从之类往下写,就是子类新增的函数体 } } } 5 Test Main ——主入口:测试 Enemy1、Enemy2 —— 代表两种敌人类型:属于怪物的一种,同样属于敌人,所以可以继承 Enemy 敌人类 这样,不用再 Enemy1、Enemy2 类中写任何方法,默认两种怪物,就具备敌人通用的所有属性 / 函数 using System; namespace 虚方法 { /// <summary> /// 测试虚函数 /// </summary> class Program { static void Main(string[] args) { Enemy enemy = new Enemy(); enemy.Ai(); Console.WriteLine(".........................."); Enemy e = new Boss(); //敌人大类对象,用boss构造 由于子类中没有重写父类方法 e.Ai(); //所以调用的还是父类中的隐藏方法 e.Move(); Console.WriteLine(".........................."); Enemy e1 = new Enemy1(); //敌人大类对象,用子类 Enemy1 构造,由于子类中重写了父类方法 e1.Ai(); //所以调用的时候,父类的Move()方法,是子类重写一个后的方法。 e1.Move(); Console.WriteLine(".........................."); Enemy e2 = new Enemy2(); e2.Ai(); e2.Move(); Console.WriteLine(".........................."); Console.ReadLine(); } } } 输出结果: 父类怪物智能系统 父类怪物移动方法 .......................... 父类怪物智能系统 父类怪物移动方法 父类怪物移动方法 .......................... 父类怪物智能系统 这是子类-Enemy1的移动方法 这是子类-Enemy1的移动方法 .......................... 父类怪物智能系统 父类怪物移动方法 这是子类-Enemy2的移动方法 父类怪物移动方法 这是子类-Enemy2的移动方法 .......................... 支持 May Be —— 搞开发,总有一天要做的事! 拥有自己的服务器,无需再找攻略! Chinar 提供一站式教程,闭眼式创建!为新手节省宝贵时间,避免采坑! 先点击领取 —— 阿里全产品优惠券 (享受最低优惠) 1 —— 云服务器超全购买流程 (新手必备!) 2 —— 阿里ECS云服务器自定义配置 - 购买教程(新手必备!) 3—— Windows 服务器配置、运行、建站一条龙 ! 4 —— Linux 服务器配置、运行、建站一条龙 ! Chinar END 本博客为非营利性个人原创,除部分有明确署名的作品外,所刊登的所有作品的著作权均为本人所拥有,本人保留所有法定权利。违者必究 对于需要复制、转载、链接和传播博客文章或内容的,请及时和本博主进行联系,留言,Email: ichinar@icloud.com 对于经本博主明确授权和许可使用文章及内容的,使用时请注明文章或内容出处并注明网址

优秀的个人博客,低调大师

C++程序设计基础(7)位运算

注:读《程序员面试笔记》笔记总结 1.知识点 运算 符号 说明 与 & 有0为0,都1为1 或 | 由1为1,都0为0 非(取反) ~ 0变1,1变0 异或 ^ 同为0,异为1 左移 << 高位移除,低位补零 右移 >> 低位移除,高位补0 1.1异或的性质 1 a^a==0 2 0^a==a 3 a^b^b==b^a^b==a 2.面试题 2.1不使用变量交换两个值 1 //method one 2 a = a - b;//save b message 3 b = a + b;//b= old a 4 a = b - a; 5 //method two 6 a = a ^ b; 7 b = a ^ b;//b= old a 8 a = a ^ b; 提示:利用位的运算性质 2.2计算二进制的1的个数 1 //method one 2 for ( count = 0; num != 0; num=num >> 1) { 3 if (num & 1) { 4 count++; 5 } 6 } 7 //method two 8 for ( count = 0; num != 0; num &= num - 1) {//每次消掉最后的一个1 9 count++; 10 } 提示:一个数与自身减一后与操作,会消除末尾的1,每次消除一个1 2.3将二进制数倒数第M位的前N位取反(比如M=2,N=4) (1)将1左移N位(00000001=>00010000); (2)将步骤一得到的数减1(00010000=>00001111); (3)将步骤二得到的数左移M位(00001111=>00111100); (4)得到的数字与原数字进行异或。 1 int getNum(int num, int n, int m) { 2 int res = 1 << n; 3 res--; 4 res = res << m; 5 return res ^ num; 6 } 2.4找出人群中的唯一单身狗(一个数组中唯一一个数出现一次,其余的数都出现过偶数次,求该数) 1 int getSingleDog(int *a, int n) { 2 int res = 0; 3 for (int i = 0; i < n; i++) { 4 res ^= a[i]; 5 } 6 return res; 7 } 提示:异或的性质b^b==0以及交换律 2.5(找出人群中三个单身狗中的任意一个) 1 #define BITNUM 32 2 int getSingelNum_OneOfThree(int *a, int len) { 3 for (int i = 0; i < BITNUM; i++) { 4 int countOdd = 0, countEven = 0; 5 int resOdd = 0, resEven = 0; 6 int tem = 1 << i; 7 8 for (int j = 0; j < len; j++) { 9 if (tem & a[j]) { 10 countOdd++; 11 resOdd ^= a[j]; 12 } 13 else { 14 countEven++; 15 resEven ^= a[j]; 16 } 17 } 18 19 if (countOdd & 1 && resEven)//一组个数为奇数,另一组异或值不为零 20 return resOdd; 21 if (countEven & 1 && resOdd)//一组个数为奇数,另一组异或值不为零 22 return resEven; 23 } 24 return -1; 25 } 提示:按位从尾部根据0和1分成两组,当两组都有数,且偶数个的组所有值取异或不为零时,另一组取异或的值极为其中一个满足的值。

优秀的个人博客,低调大师

C++程序设计基础(8)main函数

注:读《程序员面试笔记》笔记总结 1.知识点 (2)main函数的形式 1 //first type 2 int main() 3 //second type 4 int main(int argc,char *argv[]) 不推荐使用void格式,以上两种方式函数以return 0结束; argc(argument count):代表参数的个数; argv(argument value):代表命令行输入的参数,其中argv[0]是程序名; 2.面试题 2.1键鼠main函数执行前后发生了什么 答案:main函数第一行代码执行之前会调用全局对象和静态对象的构造函数,初始化全局变量和静态变量;main函数 最后一行代码执行之后会调用atexit中注册的函数,并且调用顺序与注册顺序相反。

优秀的个人博客,低调大师

C# 绘制Word形状——基本形状、组合形状

一、序言 在Office Word中,支持在Word文档中插入类型非常丰富的形状,包括线条、矩形、基本形状(诸如圆形、多边形、星形、括号、笑脸等等图形)、箭头形状、公式形状、流程图、旗帜图形、标注图形等等,我们在编程过程中,想要在Word中绘制不同类型的图形,可以通过类库来操作。控件Spire.Doc for .NET 6.0及以上版本开始支持Office Word中的所有图形,可以通过代码操作某个单一的形状,也可以通过将单一形状进行组合来获得想要的图形或形状效果,当然,也支持自己自定义图形,通过编程绘制也是可以的。下面将介绍向Word绘制形状和组合形状的方法,方法中的代码供参考。 PS: Spire.Doc for .NET获取地址 安装后,dll文件可在安装路径下的Bin文件夹中获取 Dll引用 二、代码示例 (一)绘制单一形状 步骤1:添加如下using指定 using Spire.Doc; using Spire.Doc.Documents; using Spire.Doc.Fields; using System.Drawing; 步骤2:创建示例,添加section、paragraph //创建一个Document实例 Document doc = new Document(); //添加一个section paragraph Section sec = doc.AddSection(); Paragraph para1 = sec.AddParagraph(); 步骤3:在文档指定位置插入形状,并设置形状类型、大小、填充颜色、线条样式等 (这里简单列举几个形状的添加方法,方法比较简单,不做赘述,效果图中列举了部分形状样式,需要其他样式的形状可自行设置添加) //插入一个矩形 ShapeObject shape1 = para1.AppendShape(50, 50, ShapeType.Rectangle); shape1.FillColor = Color.Blue; shape1.StrokeColor = Color.LightSkyBlue; shape1.HorizontalPosition = 20; shape1.VerticalPosition = 20; //插入一个圆形 ShapeObject shape2 = para1.AppendShape(50, 50, ShapeType.Ellipse); shape2.FillColor = Color.Purple; shape2.StrokeColor = Color.LightPink; shape2.LineStyle = ShapeLineStyle.Single; shape2.StrokeWeight = 1; shape2.HorizontalPosition = 80; shape2.VerticalPosition = 20; //插入一个公式符号 + ShapeObject shape3 = para1.AppendShape(50, 50, ShapeType.Plus); shape3.FillColor = Color.DarkCyan; shape3.StrokeColor = Color.LightGreen; shape3.LineStyle = ShapeLineStyle.Single; shape3.StrokeWeight = 1; shape3.HorizontalPosition = 140; shape3.VerticalPosition = 20; //插入一颗星形 ShapeObject shape4 = para1.AppendShape(50, 50, ShapeType.Star); shape4.FillColor = Color.Red; shape4.StrokeColor = Color.Gold; shape4.LineStyle = ShapeLineStyle.Single; shape4.HorizontalPosition = 200; shape4.VerticalPosition = 20; 步骤4:保存文档 //保存并打开文档 doc.SaveToFile("InsertShapes.docx", FileFormat.Docx2010); System.Diagnostics.Process.Start("InsertShapes.docx"); 形状添加效果: 全部代码: 1 using Spire.Doc; 2 using Spire.Doc.Documents; 3 using Spire.Doc.Fields; 4 using System.Drawing; 5 6 namespace AddShapes_Doc 7 { 8 class Program 9 { 10 static void Main(string[] args) 11 { 12 //创建一个Document实例 13 Document doc = new Document(); 14 15 //添加一个section paragraph 16 Section sec = doc.AddSection(); 17 Paragraph para1 = sec.AddParagraph(); 18 19 //插入一个矩形 20 ShapeObject shape1 = para1.AppendShape(50, 50, ShapeType.Rectangle); 21 shape1.FillColor = Color.Blue; 22 shape1.StrokeColor = Color.LightSkyBlue; 23 shape1.HorizontalPosition = 20; 24 shape1.VerticalPosition = 20; 25 26 //插入一个圆形 27 ShapeObject shape2 = para1.AppendShape(50, 50, ShapeType.Ellipse); 28 shape2.FillColor = Color.Purple; 29 shape2.StrokeColor = Color.LightPink; 30 shape2.LineStyle = ShapeLineStyle.Single; 31 shape2.StrokeWeight = 1; 32 shape2.HorizontalPosition = 80; 33 shape2.VerticalPosition = 20; 34 35 //插入一个公式符号 + 36 ShapeObject shape3 = para1.AppendShape(50, 50, ShapeType.Plus); 37 shape3.FillColor = Color.DarkCyan; 38 shape3.StrokeColor = Color.LightGreen; 39 shape3.LineStyle = ShapeLineStyle.Single; 40 shape3.StrokeWeight = 1; 41 shape3.HorizontalPosition = 140; 42 shape3.VerticalPosition = 20; 43 44 //插入一颗星形 45 ShapeObject shape4 = para1.AppendShape(50, 50, ShapeType.Star); 46 shape4.FillColor = Color.Red; 47 shape4.StrokeColor = Color.Gold; 48 shape4.LineStyle = ShapeLineStyle.Single; 49 shape4.HorizontalPosition = 200; 50 shape4.VerticalPosition = 20; 51 52 //插入一个立方体 53 ShapeObject shape5 = para1.AppendShape(50, 50, ShapeType.Cube); 54 shape5.FillColor = Color.OrangeRed; 55 shape5.StrokeColor = Color.Orange; 56 shape5.LineStyle = ShapeLineStyle.Single; 57 shape5.HorizontalPosition = 260; 58 shape5.VerticalPosition = 20; 59 60 //插入一个圆柱体 61 ShapeObject shape6 = para1.AppendShape(50, 50, ShapeType.Can); 62 shape6.FillColor = Color.Goldenrod; 63 shape6.StrokeColor = Color.Gold; 64 shape6.LineStyle = ShapeLineStyle.Single; 65 shape6.HorizontalPosition = 320; 66 shape6.VerticalPosition = 20; 67 68 //插入一个箭头 69 ShapeObject shape7 = para1.AppendShape(50, 50, ShapeType.Arrow); 70 shape7.FillColor = Color.Yellow; 71 shape7.StrokeColor = Color.Yellow; 72 shape7.LineStyle = ShapeLineStyle.Single; 73 shape7.HorizontalPosition = 20; 74 shape7.VerticalPosition = 80; 75 76 //插入一个v形臂章图形 77 ShapeObject shape8 = para1.AppendShape(50, 50, ShapeType.Chevron); 78 shape8.FillColor = Color.YellowGreen; 79 shape8.StrokeColor = Color.Yellow; 80 shape8.LineStyle = ShapeLineStyle.Single; 81 shape8.HorizontalPosition = 80; 82 shape8.VerticalPosition = 80; 83 84 //插入一个循环箭头图形 85 ShapeObject shape9 = para1.AppendShape(50, 50, ShapeType.CircularArrow); 86 shape9.FillColor = Color.Green; 87 shape9.StrokeColor = Color.Yellow; 88 shape9.LineStyle = ShapeLineStyle.Single; 89 shape9.HorizontalPosition = 140; 90 shape9.VerticalPosition = 80; 91 92 //插入一个云图形 93 ShapeObject shape10 = para1.AppendShape(50, 50, ShapeType.CloudCallout); 94 shape10.FillColor = Color.LightSkyBlue; 95 shape10.StrokeColor = Color.White; 96 shape10.LineStyle = ShapeLineStyle.Single; 97 shape10.HorizontalPosition = 200; 98 shape10.VerticalPosition = 80; 99 100 //插入一个环形图 101 ShapeObject shape11 = para1.AppendShape(50, 50, ShapeType.Donut); 102 shape11.FillColor = Color.Pink; 103 shape11.StrokeColor = Color.White; 104 shape11.LineStyle = ShapeLineStyle.Single; 105 shape11.HorizontalPosition = 260; 106 shape11.VerticalPosition = 80; 107 108 //插入一个波浪形状图 109 ShapeObject shape12 = para1.AppendShape(50, 50, ShapeType.DoubleWave); 110 shape12.FillColor = Color.Plum; 111 shape12.StrokeColor = Color.White; 112 shape12.LineStyle = ShapeLineStyle.Single; 113 shape12.HorizontalPosition = 320; 114 shape12.VerticalPosition = 80; 115 116 //插入一个礼结状图形 117 ShapeObject shape13 = para1.AppendShape(50, 50, ShapeType.EllipseRibbon); 118 shape13.FillColor = Color.RosyBrown; 119 shape13.StrokeColor = Color.White; 120 shape13.LineStyle = ShapeLineStyle.Single; 121 shape13.HorizontalPosition = 20; 122 shape13.VerticalPosition = 140; 123 124 //插入一个心形图 125 ShapeObject shape14 = para1.AppendShape(50, 50, ShapeType.Heart); 126 shape14.FillColor = Color.Red; 127 shape14.StrokeColor = Color.White; 128 shape14.LineStyle = ShapeLineStyle.Single; 129 shape14.HorizontalPosition = 80; 130 shape14.VerticalPosition = 140; 131 132 //插入一个六边形图形 133 ShapeObject shape15 = para1.AppendShape(50, 50, ShapeType.Hexagon); 134 shape15.FillColor = Color.DarkCyan; 135 shape15.StrokeColor = Color.White; 136 shape15.LineStyle = ShapeLineStyle.Single; 137 shape15.HorizontalPosition = 140; 138 shape15.VerticalPosition = 140; 139 140 //插入一个不规则图形 141 ShapeObject shape16 = para1.AppendShape(50, 50, ShapeType.IrregularSeal1); 142 shape16.FillColor = Color.DeepPink; 143 shape16.StrokeColor = Color.White; 144 shape16.LineStyle = ShapeLineStyle.Single; 145 shape16.HorizontalPosition = 200; 146 shape16.VerticalPosition = 140; 147 148 //插入一个月亮形状 149 ShapeObject shape17 = para1.AppendShape(50, 50, ShapeType.Moon); 150 shape17.FillColor = Color.Violet; 151 shape17.StrokeColor = Color.White; 152 shape17.LineStyle = ShapeLineStyle.Single; 153 shape17.HorizontalPosition = 260; 154 shape17.VerticalPosition = 140; 155 156 //插入一个"禁止"形状 157 ShapeObject shape18 = para1.AppendShape(50, 50, ShapeType.NoSmoking); 158 shape18.FillColor = Color.Yellow; 159 shape18.StrokeColor = Color.Goldenrod; 160 shape18.LineStyle = ShapeLineStyle.Single; 161 shape18.HorizontalPosition = 320; 162 shape18.VerticalPosition = 140; 163 164 //保存并打开文档 165 doc.SaveToFile("InsertShapes.docx", FileFormat.Docx2010); 166 System.Diagnostics.Process.Start("InsertShapes.docx"); 167 } 168 } 169 } View Code (二)添加组合形状 步骤1:添加如下using指令 using Spire.Doc; using Spire.Doc.Documents; using Spire.Doc.Fields; using System.Drawing; 步骤2:创建文档,添加section、paragraph Document doc = new Document(); Section sec = doc.AddSection(); Paragraph para1 = sec.AddParagraph(); 步骤3:添加文字,并应用格式到文字 para1.AppendText("中日文化交流"); ParagraphStyle style1 = new ParagraphStyle(doc); style1.Name = "titleStyle"; style1.CharacterFormat.Bold = true; style1.CharacterFormat.FontName = "隶书"; style1.CharacterFormat.FontSize = 30f; doc.Styles.Add(style1); para1.ApplyStyle("titleStyle"); para1.Format.HorizontalAlignment = HorizontalAlignment.Center; 步骤4:实例化段落2,并创建一个形状组合,并设置大小 //实例化段落2 Paragraph para2 = sec.AddParagraph(); //创建一个形状组合并设置大小 ShapeGroup shapegr = para2.AppendShapeGroup(300, 300); 步骤5:绘制一个中国国旗,这里需要组合形状矩形和五角星形,并填充相应的颜色 //添加一个矩形到形状组合 shapegr.ChildObjects.Add(new ShapeObject(doc, ShapeType.Rectangle) { Width = 900, Height = 500, LineStyle = ShapeLineStyle.Single, FillColor = Color.Red, StrokeColor = Color.Red, StrokeWeight = 1, }); //添加第一个五角星到形状组合 shapegr.ChildObjects.Add(new ShapeObject(doc, ShapeType.Star) { Width = 100, Height = 100, VerticalPosition = 90, HorizontalPosition = 90, LineStyle = ShapeLineStyle.Single, FillColor = Color.Yellow, StrokeColor = Color.Yellow, StrokeWeight = 1, }); //添加第二个五角星到形状组合 shapegr.ChildObjects.Add(new ShapeObject(doc, ShapeType.Star) { Width = 50, Height = 50, VerticalPosition = 40, HorizontalPosition = 210, LineStyle = ShapeLineStyle.Single, FillColor = Color.Yellow, StrokeColor = Color.Yellow, StrokeWeight = 1, }); //添加第三个五角星到形状组合 shapegr.ChildObjects.Add(new ShapeObject(doc, ShapeType.Star) { Width = 50, Height = 50, VerticalPosition = 80, HorizontalPosition = 280, LineStyle = ShapeLineStyle.Single, FillColor = Color.Yellow, StrokeColor = Color.Yellow, StrokeWeight = 1, }); //添加第四个五角星到形状组合 shapegr.ChildObjects.Add(new ShapeObject(doc, ShapeType.Star) { Width = 50, Height = 50, VerticalPosition = 160, HorizontalPosition = 280, LineStyle = ShapeLineStyle.Single, FillColor = Color.Yellow, StrokeColor = Color.Yellow, StrokeWeight = 1, }); //添加第五个五角星到形状组合 shapegr.ChildObjects.Add(new ShapeObject(doc, ShapeType.Star) { Width = 50, Height = 50, VerticalPosition = 220, HorizontalPosition = 210, LineStyle = ShapeLineStyle.Single, FillColor = Color.Yellow, StrokeColor = Color.Yellow, StrokeWeight = 1, }); 步骤6:绘制一个日本国旗,需要组合形状矩形和圆形,并填充颜色 //绘制一个矩形并添加到形状组合 shapegr.ChildObjects.Add(new ShapeObject(doc, ShapeType.Rectangle) { Width = 900, Height = 500, VerticalPosition = 700, HorizontalPosition = 600, LineStyle = ShapeLineStyle.Single, FillColor = Color.WhiteSmoke, StrokeColor = Color.WhiteSmoke, StrokeWeight = 1, }); //绘制一个圆形并添加到形状组合 shapegr.ChildObjects.Add(new ShapeObject(doc, ShapeType.Ellipse) { Width = 250, Height = 250, VerticalPosition = 800, HorizontalPosition = 900, LineStyle = ShapeLineStyle.Single, FillColor = Color.Red, StrokeColor = Color.Red, StrokeWeight = 1, }); 步骤7:保存文档 //保存并打开文档 doc.SaveToFile("InsertShapegroups.docx", FileFormat.Docx2010); System.Diagnostics.Process.Start("InsertShapegroups.docx"); 添加效果: (此时的图形是组合后的效果,任意拖动图形不会出现各个形状分离、错位的情况。) 全部代码: 1 using Spire.Doc; 2 using Spire.Doc.Documents; 3 using Spire.Doc.Fields; 4 using System.Drawing; 5 6 namespace InsertShapesGroup_Doc 7 { 8 class Program 9 { 10 static void Main(string[] args) 11 { 12 //创建一个Document实例并添加section及paragraph 13 Document doc = new Document(); 14 Section sec = doc.AddSection(); 15 Paragraph para1 = sec.AddParagraph(); 16 //添加文字,并应用格式到文字 17 para1.AppendText("中日文化交流"); 18 ParagraphStyle style1 = new ParagraphStyle(doc); 19 style1.Name = "titleStyle"; 20 style1.CharacterFormat.Bold = true; 21 style1.CharacterFormat.FontName = "隶书"; 22 style1.CharacterFormat.FontSize = 30f; 23 doc.Styles.Add(style1); 24 para1.ApplyStyle("titleStyle"); 25 para1.Format.HorizontalAlignment = HorizontalAlignment.Center; 26 27 //实例化段落2 28 Paragraph para2 = sec.AddParagraph(); 29 //创建一个形状组合并设置大小 30 ShapeGroup shapegr = para2.AppendShapeGroup(300, 300); 31 32 //添加一个矩形到形状组合 33 shapegr.ChildObjects.Add(new ShapeObject(doc, ShapeType.Rectangle) 34 { 35 Width = 900, 36 Height = 500, 37 LineStyle = ShapeLineStyle.Single, 38 FillColor = Color.Red, 39 StrokeColor = Color.Red, 40 StrokeWeight = 1, 41 }); 42 43 //添加第一个五角星到形状组合 44 shapegr.ChildObjects.Add(new ShapeObject(doc, ShapeType.Star) 45 { 46 Width = 100, 47 Height = 100, 48 VerticalPosition = 90, 49 HorizontalPosition = 90, 50 LineStyle = ShapeLineStyle.Single, 51 FillColor = Color.Yellow, 52 StrokeColor = Color.Yellow, 53 StrokeWeight = 1, 54 }); 55 //添加第二个五角星到形状组合 56 shapegr.ChildObjects.Add(new ShapeObject(doc, ShapeType.Star) 57 { 58 Width = 50, 59 Height = 50, 60 VerticalPosition = 40, 61 HorizontalPosition = 210, 62 LineStyle = ShapeLineStyle.Single, 63 FillColor = Color.Yellow, 64 StrokeColor = Color.Yellow, 65 StrokeWeight = 1, 66 }); 67 //添加第三个五角星到形状组合 68 shapegr.ChildObjects.Add(new ShapeObject(doc, ShapeType.Star) 69 { 70 Width = 50, 71 Height = 50, 72 VerticalPosition = 80, 73 HorizontalPosition = 280, 74 LineStyle = ShapeLineStyle.Single, 75 FillColor = Color.Yellow, 76 StrokeColor = Color.Yellow, 77 StrokeWeight = 1, 78 }); 79 //添加第四个五角星到形状组合 80 shapegr.ChildObjects.Add(new ShapeObject(doc, ShapeType.Star) 81 { 82 Width = 50, 83 Height = 50, 84 VerticalPosition = 160, 85 HorizontalPosition = 280, 86 LineStyle = ShapeLineStyle.Single, 87 FillColor = Color.Yellow, 88 StrokeColor = Color.Yellow, 89 StrokeWeight = 1, 90 }); 91 //添加第五个五角星到形状组合 92 shapegr.ChildObjects.Add(new ShapeObject(doc, ShapeType.Star) 93 { 94 Width = 50, 95 Height = 50, 96 VerticalPosition = 220, 97 HorizontalPosition = 210, 98 LineStyle = ShapeLineStyle.Single, 99 FillColor = Color.Yellow, 100 StrokeColor = Color.Yellow, 101 StrokeWeight = 1, 102 }); 103 104 //绘制一个矩形并添加到形状组合 105 shapegr.ChildObjects.Add(new ShapeObject(doc, ShapeType.Rectangle) 106 { 107 Width = 900, 108 Height = 500, 109 VerticalPosition = 700, 110 HorizontalPosition = 600, 111 LineStyle = ShapeLineStyle.Single, 112 FillColor = Color.WhiteSmoke, 113 StrokeColor = Color.Wheat, 114 StrokeWeight = 1, 115 }); 116 //绘制一个圆形并添加到形状组合 117 shapegr.ChildObjects.Add(new ShapeObject(doc, ShapeType.Ellipse) 118 { 119 Width = 250, 120 Height = 250, 121 VerticalPosition = 800, 122 HorizontalPosition = 900, 123 LineStyle = ShapeLineStyle.Single, 124 FillColor = Color.Red, 125 StrokeColor = Color.Red, 126 StrokeWeight = 1, 127 }); 128 129 //保存并打开文档 130 doc.SaveToFile("InsertShapegroups.docx", FileFormat.Docx2010); 131 System.Diagnostics.Process.Start("InsertShapegroups.docx"); 132 } 133 } 134 } View Code 以上全部是关于Word中绘制图形形状的内容。如需转载,请注明出处! 感谢阅读!

优秀的个人博客,低调大师

C# DataGridView 在最左侧显示行号方法

代码: private void dataGridView1_RowPostPaint(object sender, DataGridViewRowPostPaintEventArgs e) { DataGridView dgv = sender as DataGridView; Rectangle rectangle = new Rectangle(e.RowBounds.Location.X, e.RowBounds.Location.Y, dgv.RowHeadersWidth - 4, e.RowBounds.Height); TextRenderer.DrawText(e.Graphics, (e.RowIndex + 1).ToString(), dgv.RowHeadersDefaultCellStyle.Font, rectangle, dgv.RowHeadersDefaultCellStyle.ForeColor, TextFormatFlags.VerticalCenter | TextFormatFlags.Right); } 效果:

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

用户登录
用户注册