C# RichTextBox 中用栈实现代码的自动缩进
来源:互联网 发布:金达莱花网络歌手唱的 编辑:程序博客网 时间:2024/05/17 23:09
首先说明我这里说的栈指的是数据结构中的栈,而并非内存中的堆栈
栈,一言以蔽之就是一种先入后出的数据结构.就和吃煎饼一样,最先烙的总是最后被吃掉.
好了,不说废话了,开始正文.
既然是实际应用,我先描述一下想要实现的问题.
在 RichTextBox 中我想实现的是类似于普通的IDE中的代码缩进功能,打一个 '{' 再
打一个回车时,就会自动缩进一个制表符,没有错就是这样一个简单的问题.
现在我给出我的解决思路以及部分的代码
其实思路很简单:
栈,一言以蔽之就是一种先入后出的数据结构.就和吃煎饼一样,最先烙的总是最后被吃掉.
好了,不说废话了,开始正文.
既然是实际应用,我先描述一下想要实现的问题.
在 RichTextBox 中我想实现的是类似于普通的IDE中的代码缩进功能,打一个 '{' 再
打一个回车时,就会自动缩进一个制表符,没有错就是这样一个简单的问题.
现在我给出我的解决思路以及部分的代码
其实思路很简单:
输入一个括号 入栈,删除一个括号 出栈,当光标位置变化,更新栈的维护区域.
部分代码如下
这个事件是
KeyDown 事件
// 上下左右方向键 及 删除键的处理switch(e.KeyCode){case Keys.Up:// 当前行和下一行if(KeyDownBIA == 0){KeyDownBIA ++;}else{// 不能超过最大行int line = (CodeEdit.GetLineFromCharIndex(CodeEdit.Text.Length));if(KeyDownBIA < line)KeyDownBIA ++;}break;case Keys.Down:if(KeyDownBIA == 0){KeyDownBIA --;}else{// 不能小于0行if(KeyDownBIA > 0)KeyDownBIA --;}break;case Keys.Left:// 左// 用异常机制处理越界try{if(CodeEdit.Text[SelectionStart-1] == '{')stack--;else if(CodeEdit.Text[SelectionStart-1] == '}')stack++;}catch{return;}break;case Keys.Right:// 右// 用异常机制处理越界try{if(CodeEdit.Text[SelectionStart] == '}')stack--;else if(CodeEdit.Text[SelectionStart] == '{')stack++;}catch{return;}break;case Keys.Back:// 当且仅当删除单个字符时if(CodeEdit.SelectedText.Length <= 0){// 用异常机制处理越界try{if(CodeEdit.Text[SelectionStart-1] == '{')stack--;else if(CodeEdit.Text[SelectionStart-1] == '}')stack++;}catch{return;}}break;}
TextChanged
<span style="white-space:pre"></span>if(EnterBIA > 0){<span style="white-space:pre"></span>// EnterBIA 标记按键是否为用户触发if(stack >= 0){SelectionStart = CodeEdit.SelectionStart;for(i =0;i<stack;i++)// 在光标处插入颜色则不会改变颜色CodeEdit.SelectedText += '\t';CodeEdit.Select(SelectionStart+i,0);CodeEdit.SelectionColor = Color.Black;}EnterBIA = -1;}<span style="white-space:pre"></span>
1 0
- C# RichTextBox 中用栈实现代码的自动缩进
- RichTextBox的缩进
- 让C#自动缩进排列代码的快捷键
- 设置RichTextBox的左右缩进
- C#项目中代码不能自动缩进
- RICHTEXTBOX中实现文字的自动滚动
- SharpDevelop代码缩进的实现
- 用ultraedit实现代码格式自动排列(自动缩进)
- vs2010代码自动缩进
- ASP.NET中用C#实现的采集代码:
- 代码缩进的简易实现(Python实现)
- C# RichTextBox的使用方法
- C# RichTextBox的使用方法
- emacs脚本实现verilog代码的缩进
- c#自带的richtextbox实现动态的gif
- C#之使用RichTextBox 实现简单的txt编辑器
- tab 4 代码自动缩进
- 自动调整代码缩进格式
- linux下的挂载命令
- ajax异步请求
- oracle一些简单的优化
- http返回头中content-length与Transfer-Encoding: chunked的问题释疑
- 陈力:传智播客古代 珍宝币 泡泡龙游戏开发第49讲:PHP报表开发(JpGraph)
- C# RichTextBox 中用栈实现代码的自动缩进
- 计数问题(二)
- SimpleDateFormat的使用问题
- 白血病男孩的艰难之路
- EntityFrameWork学习
- Android DataBinding:再见Presenter,你好ViewModel!
- 向数组中循环添加内容
- Android性能优化典范
- Oracle语句优化规则汇总(7)