C#文本框TextBox使用问题
发布网友
发布时间:2022-05-17 13:28
我来回答
共4个回答
热心网友
时间:2023-10-23 02:03
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事件处理函数,详细见上面代码
热心网友
时间:2023-10-23 02:04
你用一个数组记录你的操作,然后按撤销顺序读取,不知是否可行?
热心网友
时间:2023-10-23 02:04
把问题说清楚
热心网友
时间:2023-10-23 02:05
用richTextBox追问貌似也不行啊
追答richTextBox应该是可以的啊,我用的是VS2010