我的编程空间,编程开发者的网络收藏夹
学习永远不晚

C#怎么实现带行数和标尺的RichTextBox

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

C#怎么实现带行数和标尺的RichTextBox

这篇文章主要介绍“C#怎么实现带行数和标尺的RichTextBox”,在日常操作中,相信很多人在C#怎么实现带行数和标尺的RichTextBox问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C#怎么实现带行数和标尺的RichTextBox”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

实践过程

效果

C#怎么实现带行数和标尺的RichTextBox

代码

 public partial class GuageRichTextBox : UserControl    {        public GuageRichTextBox()        {            InitializeComponent();            richTextBox1.WordWrap = false;            richTextBox1.Top = Distance_X;            richTextBox1.Left = Distance_Y;            richTextBox1.Width = this.Width - Distance_X - 2;            richTextBox1.Height = this.Height - Distance_Y - 2;        }        #region 变量及常量        const int Distance_X = 30; //设置RichTextBox控件的X位置        const int Distance_Y = 30; //设置RichTextBox控件的Y位置        const int SpaceBetween = 3; //设置标尺的间距        public static float thisleft = 0; //设置控件的左边距        public static float StartBitH = 0; //记录横向滚动条的位置        public static float StartBitV = 0; //记录纵向滚动条的位置        const int Scale1 = 3; //设置刻度最短的线长        const int Scale5 = 6; //设置刻度为5时的线长        const int Scale10 = 9; //设置刻度为10是垢线长        public static float Degree = 0; //度数        public static float CodeSize = 1; //代码编号的宽度        #endregion        #region 属性        [Browsable(true), Category("设置标尺控件"), Description("设置RichTextBox控件的相关属性")] //在“属性”窗口中显示DataStyle属性        public RichTextBox NRichTextBox        {            get { return richTextBox1; }        }        public enum Ruler        {            Graduation = 0, //刻度            Rule = 1, //尺子        }        private bool TCodeShow = false;        [Browsable(true), Category("设置标尺控件"), Description("是否在RichTextBox控件的前面添加代码的行号")] //在“属性”窗口中显示DataStyle属性        public bool CodeShow        {            get { return TCodeShow; }            set            {                TCodeShow = value;                this.Invalidate();            }        }        private Ruler TRulerStyle = Ruler.Graduation;        [Browsable(true), Category("设置标尺控件"), Description("设置标尺样式:\nGraduation为刻度\nRule为尺子")] //在“属性”窗口中显示DataStyle属性        public Ruler RulerStyle        {            get { return TRulerStyle; }            set            {                TRulerStyle = value;                this.Invalidate();            }        }        public enum Unit        {            Cm = 0, //厘米            Pels = 1, //像素        }        private Unit TUnitStyle = Unit.Cm;        [Browsable(true), Category("设置标尺控件"), Description("设置标尺的单位:\nCm为厘米\nPels为像素")] //在“属性”窗口中显示DataStyle属性        public Unit UnitStyle        {            get { return TUnitStyle; }            set            {                TUnitStyle = value;                this.Invalidate();            }        }        #endregion        #region 事件        private void GuageRichTextBox_Paint(object sender, PaintEventArgs e)        {            e.Graphics.DrawRectangle(new Pen(Color.DarkGray), 0, 0, this.Width - 1, this.Height - 1); //绘制外边框            if (CodeShow) //如查在文本框左边添加行号            {                //获取行号的宽度                float tem_code =                    (float) StringSize(                        (Convert.ToInt32(CodeSize + (float) (richTextBox1.Height /                                                             (StringSize(CodeSize.ToString(), richTextBox1.Font,                                                                 false))))).ToString(), this.Font, true);                richTextBox1.Top = Distance_X; //设置控件的顶端距离                richTextBox1.Left = Distance_Y + (int) Math.Ceiling(tem_code); //设置控件的左端距离                richTextBox1.Width = this.Width - Distance_X - 2 - (int) Math.Ceiling(tem_code); //设置控件的宽度                richTextBox1.Height = this.Height - Distance_Y - 2; //设置控件高度                thisleft = Distance_Y + tem_code; //设置标尺的左端位置            }            else            {                richTextBox1.Top = Distance_X; //设置控件的顶端距离                richTextBox1.Left = Distance_Y; //设置控件的左端距离                richTextBox1.Width = this.Width - Distance_X - 2; //设置控件的宽度                richTextBox1.Height = this.Height - Distance_Y - 2; //设置控件高度                thisleft = Distance_Y; //设置标尺的左端位置            }            //绘制文本框的边框            e.Graphics.DrawRectangle(new Pen(Color.LightSteelBlue), richTextBox1.Location.X - 1, thisleft - 1,                richTextBox1.Width + 1, richTextBox1.Height + 1);            e.Graphics.FillRectangle(new SolidBrush(Color.Silver), 1, 1, this.Width - 2, Distance_Y - 2); //文本框的上边框            e.Graphics.FillRectangle(new SolidBrush(Color.Silver), 1, 1, Distance_X - 2, this.Height - 2); //文本框的左边框            e.Graphics.FillRectangle(new SolidBrush(Color.Gray), 3, 3, Distance_X - 7, Distance_Y - 8); //绘制左上角的方块边框            e.Graphics.DrawRectangle(new Pen(SystemColors.Control), 3, 3, Distance_X - 8, Distance_Y - 8); //绘制左上角的方块            if (RulerStyle == Ruler.Rule) //标尺            {                //绘制上边的标尺背景                e.Graphics.FillRectangle(new SolidBrush(Color.Gray), thisleft - 3, 3, this.Width - (thisleft - 2),                    Distance_Y - 9); //绘制左上角的方块边框                e.Graphics.DrawLine(new Pen(SystemColors.Control), thisleft - 3, 3, this.Width - 2, 3); //绘制方块的上边线                e.Graphics.DrawLine(new Pen(SystemColors.Control), thisleft - 3, Distance_Y - 5, this.Width - 2,                    Distance_Y - 5); //绘制方块的下边线                e.Graphics.FillRectangle(new SolidBrush(Color.WhiteSmoke), thisleft - 2, 9,                    this.Width - (thisleft - 2) - 1, Distance_Y - 19); //绘制方块的中间块                //绘制左边的标尺背景                e.Graphics.FillRectangle(new SolidBrush(Color.Gray), 3, Distance_Y - 3, Distance_X - 7,                    this.Height - (Distance_Y - 3) - 2); //绘制左边的方块                e.Graphics.DrawLine(new Pen(SystemColors.Control), 3, Distance_Y - 3, 3, this.Height - 2); //绘制方块的左边线                e.Graphics.DrawLine(new Pen(SystemColors.Control), Distance_X - 5, Distance_Y - 3, Distance_X - 5,                    this.Height - 2); //绘制方块的右边线                e.Graphics.FillRectangle(new SolidBrush(Color.WhiteSmoke), 9, Distance_Y - 3, Distance_X - 19,                    this.Height - (Distance_Y - 3) - 2); //绘制方块的中间块            }            int tem_temHeight = 0;            string tem_value = "";            int tem_n = 0;            int divide = 5;            Pen tem_p = new Pen(new SolidBrush(Color.Black));            //横向刻度的设置            if (UnitStyle == Unit.Cm) //如果刻度的单位是厘米                Degree = e.Graphics.DpiX / 25.4F; //将像素转换成毫米            if (UnitStyle == Unit.Pels) //如果刻度的单位是像素                Degree = 10; //设置10像素为一个刻度            int tem_width = this.Width - 3;            tem_n = (int) StartBitH; //记录横向滚动条的位置            if (tem_n != StartBitH) //如果横向滚动条的位置值为小数                StartBitH = (int) StartBitH; //对横向滚动条的位置进行取整            for (float i = 0; i < tem_width;) //在文本框的项端绘制标尺            {                tem_temHeight = Scale1; //设置刻度线的最小长度                float j = (i + (int) StartBitH) / Degree; //获取刻度值                tem_value = "";                j = (int) j; //对刻度值进行取整                if (j % (divide * 2) == 0) //如果刻度值是10进位                {                    tem_temHeight = Scale10; //设置最长的刻度线                    if (UnitStyle == Unit.Cm) //如果刻度的单位为厘米                        tem_value = Convert.ToString(j / 10); //记录刻度值                    if (UnitStyle == Unit.Pels) //如果刻度的单位为像素                        tem_value = Convert.ToString((int) j * 10); //记录刻度值                }                else if (j % divide == 0) //如果刻度值的进位为5                {                    tem_temHeight = Scale5; //设置刻度线为中等                }                tem_p.Width = 1;                if (RulerStyle == Ruler.Graduation) //如果是以刻度值进行测量                {                    //绘制刻度线                    e.Graphics.DrawLine(tem_p, i + 1 + thisleft, SpaceBetween, i + 1 + thisleft,                        SpaceBetween + tem_temHeight);                    if (tem_value.Length > 0) //如果有刻度值                        //绘制刻度值                        ProtractString(e.Graphics, tem_value.Trim(), i + 1 + thisleft, SpaceBetween, i + 1 + thisleft,                            SpaceBetween + tem_temHeight, 0);                }                if (RulerStyle == Ruler.Rule) //如果是以标尺进行测量                {                    if (tem_value.Length > 0) //如果有刻度值                    {                        e.Graphics.DrawLine(tem_p, i + 1 + thisleft, 4, i + 1 + thisleft, 7); //绘制顶端的刻度线                        e.Graphics.DrawLine(tem_p, i + 1 + thisleft, Distance_Y - 9, i + 1 + thisleft,                            Distance_Y - 7); //绘制底端的刻度线                        float tem_space = 3 + (Distance_X - 19F - 9F - StringSize(tem_value.Trim(), this.Font, false)) /                            2F; //设置文本的横向位置                        //绘制文本                        ProtractString(e.Graphics, tem_value.Trim(), i + 1 + thisleft, (float) Math.Ceiling(tem_space),                            i + 1 + thisleft, (float) Math.Ceiling(tem_space) + tem_temHeight, 0);                    }                }                i += Degree; //累加刻度的宽度            }            //纵向刻度的设置            if (UnitStyle == Unit.Cm) //如果刻度的单位是厘米                Degree = e.Graphics.DpiX / 25.4F; //将像素转换成毫米            if (UnitStyle == Unit.Pels) //如果刻度的单位是像素                Degree = 10; //刻度值设为10像素            int tem_height = this.Height - 3;            tem_n = (int) StartBitV; //记录纵向滚动条的位置            if (tem_n != StartBitV) //如果纵向滚动条的位置为小数                StartBitV = (int) StartBitV; //对其进行取整            for (float i = 0; i < tem_height;) //在文本框的左端绘制标尺            {                tem_temHeight = Scale1; //设置刻度线的最小值                float j = (i + (int) StartBitV) / Degree; //获取当前的刻度值                tem_value = "";                j = (int) j; //对刻度值进行取整                if (j % 10 == 0) //如果刻度值是10进位                {                    tem_temHeight = Scale10; //设置刻度线的长度为最长                    if (UnitStyle == Unit.Cm) //如果刻度的单位是厘米                        tem_value = Convert.ToString(j / 10); //获取厘米的刻度值                    if (UnitStyle == Unit.Pels) //如果刻度的单位是像素                        tem_value = Convert.ToString((int) j * 10); //获取像素的刻度值                }                else if (j % 5 == 0) //如果刻度值是5进位                {                    tem_temHeight = Scale5; //设置刻度线的长度为中等                }                tem_p.Width = 1;                if (RulerStyle == Ruler.Graduation) //如果是以刻度值进行测量                {                    //绘制刻度线                    e.Graphics.DrawLine(tem_p, SpaceBetween, i + 1 + Distance_Y, SpaceBetween + tem_temHeight,                        i + 1 + Distance_Y);                    if (tem_value.Length > 0) //如果有刻度值                        //绘制刻度值                        ProtractString(e.Graphics, tem_value.Trim(), SpaceBetween, i + 1 + Distance_Y,                            SpaceBetween + tem_temHeight, i + 1 + Distance_Y, 1);                }                if (RulerStyle == Ruler.Rule) //如果是以标尺进行测量                {                    if (tem_value.Length > 0) //如果有刻度值                    {                        e.Graphics.DrawLine(tem_p, 4, i + 1 + Distance_Y, 7, i + 1 + Distance_Y); //绘制左端刻度线                        e.Graphics.DrawLine(tem_p, Distance_Y - 9, i + 1 + Distance_Y, Distance_Y - 7,                            i + 1 + Distance_Y); //绘制右端刻度线                        float tem_space = 3 + (Distance_X - 19F - 9F - StringSize(tem_value.Trim(), this.Font, false)) /                            2F; //设置文本的纵向位置                        //绘制文本                        ProtractString(e.Graphics, tem_value.Trim(), (float) Math.Floor(tem_space), i + 1 + Distance_Y,                            (float) Math.Floor(tem_space) + tem_temHeight, i + 1 + Distance_Y, 1);                    }                }                i += Degree; //累加刻度值            }            if (CodeShow) //如果显示行号            {                //设置文本的高度                float tem_FontHeight =                    (float) (richTextBox1.Height / (StringSize(CodeSize.ToString(), richTextBox1.Font, false)));                float tem_tep = richTextBox1.Top; //获取文本框的顶端位置                int tem_mark = 0;                for (int i = 0; i < (int) tem_FontHeight; i++) //绘制行号                {                    tem_mark = i + (int) CodeSize; //设置代码编号的宽度                    //绘制行号                    e.Graphics.DrawString(tem_mark.ToString(), this.Font, new SolidBrush(Color.Red),                        new PointF(richTextBox1.Left - StringSize(tem_mark.ToString(), this.Font, true) - 2, tem_tep));                    tem_tep = tem_tep + StringSize("懂", richTextBox1.Font, false); //设置下一个行号的X坐标值                }            }        }        private void GuageRichTextBox_Resize(object sender, EventArgs e)        {            richTextBox1.Top = Distance_X; //设置控件的顶端位置            richTextBox1.Left = Distance_Y; //设置控件的左端位置            richTextBox1.Width = this.Width - Distance_X - 2; //设置控件的宽度            richTextBox1.Height = this.Height - Distance_Y - 2; //设置控件的高度            this.Invalidate();        }        private void richTextBox1_HScroll(object sender, EventArgs e)        {            StartBitH = (int) (Math.Abs((float) richTextBox1.GetPositionFromCharIndex(0).X - 1)); //检索控件横向内指定字符索引处的位置            this.Invalidate();        }        private void richTextBox1_VScroll(object sender, EventArgs e)        {            StartBitV = (int) (Math.Abs((float) richTextBox1.GetPositionFromCharIndex(0).Y - 1)); //检索控件纵向内指定字符索引处的位置            if (CodeShow) //如果显示行号                CodeSize = (int) Math.Abs((richTextBox1.GetPositionFromCharIndex(0).Y /                                           StringSize("懂", richTextBox1.Font, false))); //设置行号的高度            this.Invalidate();        }        #endregion        #region 方法        /// <summary>        /// 在指定的位置绘制文本信息        /// </summary>        /// <param e="Graphics">封装一个绘图的类对象</param>        /// <param str="string">文本信息</param>         /// <param x1="float">左上角x坐标</param>         /// <param y1="float">左上角y坐标</param>         /// <param x2="float">右下角x坐标</param>         /// <param y2="float">右下角y坐标</param>         /// <param n="float">标识,判断是在横向标尺上绘制文字还是在纵向标尺上绘制文字</param>         public void ProtractString(Graphics e, string str, float x1, float y1, float x2, float y2, float n)        {            float TitWidth = StringSize(str, this.Font, true); //获取字符串的宽度            if (n == 0) //在横向标尺上绘制文字                e.DrawString(str, this.Font, new SolidBrush(Color.Black), new PointF(x2 - TitWidth / 2, y2 + 1));            else //在纵向标尺上绘制文字            {                StringFormat drawFormat = new StringFormat(); //实例化StringFormat类                drawFormat.FormatFlags = StringFormatFlags.DirectionVertical; //设置文本为垂直对齐                //绘制指定的文本                e.DrawString(str, this.Font, new SolidBrush(Color.Black), new PointF(x2 + 1, y2 - TitWidth / 2),                    drawFormat);            }        }        /// <summary>        /// 获取文本的高度或宽度        /// </summary>        /// <param str="string">文本信息</param>        /// <param font="Font">字体样式</param>         /// <param n="bool">标识,判断返回的是高度还是宽度</param>         public float StringSize(string str, Font font, bool n) //n==true为width        {            Graphics TitG = this.CreateGraphics(); //创建Graphics类对象            SizeF TitSize = TitG.MeasureString(str, font); //将绘制的字符串进行格式化            float TitWidth = TitSize.Width; //获取字符串的宽度            float TitHeight = TitSize.Height; //获取字符串的高度            if (n)                return TitWidth; //返回文本信息的宽度            else                return TitHeight; //返回文本信息的高度        }        #endregion    }

到此,关于“C#怎么实现带行数和标尺的RichTextBox”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

C#怎么实现带行数和标尺的RichTextBox

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

C#怎么实现带行数和标尺的RichTextBox

这篇文章主要介绍“C#怎么实现带行数和标尺的RichTextBox”,在日常操作中,相信很多人在C#怎么实现带行数和标尺的RichTextBox问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C#怎么实现带行数
2023-07-04

C#实现带行数和标尺的RichTextBox

这篇文章主要为大家详细介绍了如何利用C#实现带行数和标尺的RichTextBox,文中的示例代码讲解详细,对我们学习C#有一定的帮助,感兴趣的小伙伴可以跟随小编一起了解一下
2022-12-16

Python+getopt怎么实现命令行带参数

Python+getopt怎么实现命令行带参数,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。Python+getopt实现命令行带参数python中 getopt 模块,该模块
2023-06-04

C++的DFS和BFS怎么实现

这篇文章主要讲解了“C++的DFS和BFS怎么实现”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C++的DFS和BFS怎么实现”吧!DFS和BFS对于非线性的结构,遍历都会首先成为一个问题。
2023-06-17

c语言数组行列互换怎么实现

要实现数组的行列互换,可以使用两个循环嵌套遍历数组,将数组的行与列进行交换。以下是一个示例代码:#include #define ROWS 3#define COLS 4void transpose(int matrix[ROWS][
2023-10-27

C#怎么实现windbg的时间旅行

本篇内容主要讲解“C#怎么实现windbg的时间旅行”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C#怎么实现windbg的时间旅行”吧!一:什么是时间旅行简而言之就是把程序的执行流拍成vlog
2023-06-30

C#中的矩形数组和锯齿数组怎么实现

本篇内容主要讲解“C#中的矩形数组和锯齿数组怎么实现”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C#中的矩形数组和锯齿数组怎么实现”吧!(一)矩形数组在C#中,矩形数组(rectangular
2023-07-06

c++函数的重载怎么实现

这篇文章主要讲解了“c++函数的重载怎么实现”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“c++函数的重载怎么实现”吧!1.函数重载概述作用:函数可以相同,提高复用性函数重载必须满足的条件:
2023-06-29

uniapp路由怎么实现带参数的跳转

UniApp是一款跨平台开发框架,支持编写一次代码即可同时发布到多个平台。在UniApp中,我们经常需要使用路由跳转功能来实现不同页面之间的跳转。其中,带参数跳转是比较常见的一种情况。本文将介绍如何使用UniApp路由带参数跳转。一、路由跳转在UniApp中,我们通过uni.navigateTo()函数实现路由跳转。通过该函数可以实现从一个页面跳转到另一个页面,例如从首页跳转到
2023-05-14

c# WPF中自定义加载时怎么实现带动画效果的Form和FormItem

本篇内容主要讲解“c# WPF中自定义加载时怎么实现带动画效果的Form和FormItem”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“c# WPF中自定义加载时怎么实现带动画效果的Form和F
2023-06-07

C语言怎么实现数据输入和输出

本文小编为大家详细介绍“C语言怎么实现数据输入和输出”,内容详细,步骤清晰,细节处理妥当,希望这篇“C语言怎么实现数据输入和输出”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。语句C语言的语句用来向计算机系统发出操
2023-07-02

怎么在C#项目中实现并行和多线程编程

这期内容当中小编将会给大家带来有关怎么在C#项目中实现并行和多线程编程,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。 一、Task的嵌套   Task中还可以再嵌套Task,Thread中能不能这样做,我
2023-06-06

Shell脚本怎么实现C语言代码行数统计

这篇文章主要介绍“Shell脚本怎么实现C语言代码行数统计”,在日常操作中,相信很多人在Shell脚本怎么实现C语言代码行数统计问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Shell脚本怎么实现C语言代码行
2023-06-09

C++ 函数错误处理和异常处理的行业标准是什么?

行业标准规定使用 errno 变量和异常处理来处理函数错误和异常。函数错误处理:使用 errno 跟踪错误,perror() 打印消息,strerror() 转换为字符串。异常处理:try-catch 捕获异常,throw 触发异常,cat
C++ 函数错误处理和异常处理的行业标准是什么?
2024-04-24

C++文件的数据写入和文件的数据读取怎么实现

这篇文章主要介绍了C++文件的数据写入和文件的数据读取怎么实现的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇C++文件的数据写入和文件的数据读取怎么实现文章都会有所收获,下面我们一起来看看吧。一:没有数据,准备
2023-07-02

怎么实现在运行时生成C#的.NET类

这篇文章主要介绍“怎么实现在运行时生成C#的.NET类”,在日常操作中,相信很多人在怎么实现在运行时生成C#的.NET类问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么实现在运行时生成C#的.NET类”的疑
2023-06-03

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录