C#文本框TextBox使用问题
在文本框中输入一些操作,按Ctrl+Z就可以撤销,及返回上一步的操作可是文本框只能够保存一步操作,如何保存多步操作呢,通过哪个属性可以实现如像VisualStudio按按...
在文本框中输入一些操作,按Ctrl+Z就可以撤销,及返回上一步的操作
可是文本框只能够保存一步操作,如何保存多步操作呢,通过哪个属性可以实现
如像VisualStudio按按Ctrl+Z,就返回上一步操作,再按就返回上一步的上一步,继续按就…… 展开
可是文本框只能够保存一步操作,如何保存多步操作呢,通过哪个属性可以实现
如像VisualStudio按按Ctrl+Z,就返回上一步操作,再按就返回上一步的上一步,继续按就…… 展开
4个回答
展开全部
1)在Form1上拖入两个TexBox,分别为textBox1和textBox2。textBox1用来显示输入的文本;textBox2用来输入文本。
2)在Form1.cs中添加一个类TextUndoBuffer。代码如下:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
TextUndoBuffer buffer;
private void Form1_Load(object sender, EventArgs e)
{
buffer = new TextUndoBuffer();
}
private void textBox1_KeyDown(object sender, KeyEventArgs e)
{
//按下Ctrl+z,取消最近一次输入的内容
if (e.KeyCode == Keys.Z && e.Modifiers == Keys.Control)
{
buffer.Undo();
textBox1.Text = buffer.GetAll();
}
}
private void textBox2_KeyPress(object sender, KeyPressEventArgs e)
{
if (e.KeyChar == (char)Keys.Return)
{
string s = textBox2.Text.Trim();
if (s != string.Empty)
{
buffer.PutInBuffer(" " + textBox2.Text.Trim());
textBox2.Clear();
textBox1.Text = buffer.GetAll();
}
}
}
}
/// <summary>
/// 这个类用来记录输入的内容并支持Undo
/// </summary>
class TextUndoBuffer
{
List<string> buffer;
public TextUndoBuffer()
{
this.buffer = new List<string>();
}
/// <summary>
/// 将输入的一句话放入缓冲区
/// </summary>
/// <param name="s"></param>
public void PutInBuffer(string s)
{
this.buffer.Add(s);
}
/// <summary>
/// 从缓冲区获取所有输入的内容
/// </summary>
/// <returns></returns>
public string GetAll()
{
string s = string.Empty;
foreach (var q in this.buffer)
{
s += q;
}
return s;
}
/// <summary>
/// Undos实现取消最近一次输入的内容
/// </summary>
public void Undo()
{
if (this.buffer.Count == 0) return;
buffer.RemoveAt(this.buffer.Count - 1);
}
}
}
3)事件处理
注意:textBox1和textBox2“共用”了同一个KeyDown事件处理函数,详细见上面代码
展开全部
你用一个数组记录你的操作,然后按撤销顺序读取,不知是否可行?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2013-11-06
展开全部
把问题说清楚
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
用richTextBox
追问
貌似也不行啊
追答
richTextBox应该是可以的啊,我用的是VS2010
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询