C#文本框TextBox使用问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#文本框TextBox使用问题相关的知识,希望对你有一定的参考价值。

在文本框中输入一些操作,按Ctrl+Z就可以撤销,及返回上一步的操作
可是文本框只能够保存一步操作,如何保存多步操作呢,通过哪个属性可以实现
如像VisualStudio按按Ctrl+Z,就返回上一步操作,再按就返回上一步的上一步,继续按就……

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事件处理函数,详细见上面代码

参考技术A 你用一个数组记录你的操作,然后按撤销顺序读取,不知是否可行? 参考技术B 把问题说清楚 参考技术C 用richTextBox追问

貌似也不行啊

追答

richTextBox应该是可以的啊,我用的是VS2010

C# - 使用鼠标在 Windows 窗体上调整文本框的高度

【中文标题】C# - 使用鼠标在 Windows 窗体上调整文本框的高度【英文标题】:C# - Adjust height of TextBox on Windows Form using Mouse 【发布时间】:2013-11-15 06:52:09 【问题描述】:

我需要为 Windows 窗体中的 TextBox 实现一个功能(使用 .NET 2.0),这样用户应该能够使用鼠标调整 TextBox 的高度。用户可以点击 TextBox 的角(或底部)并拖动,使 TextBox 的高度增加(或减少)。

请提供一些关于如何做到这一点的基本指南。

注意:我必须使用 VS 2005 和 .NET Framework V2.0

提前致谢 -Mayur Jadhav

【问题讨论】:

【参考方案1】:

这里有一个类似的问题

Resizing control at runtime

创建一个继承自文本框的自定义控件并将调整大小的代码添加到该控件中,您应该一切顺利

【讨论】:

以上是关于C#文本框TextBox使用问题的主要内容,如果未能解决你的问题,请参考以下文章

C# windows应用程序中,如何从文本框TextBox中提取数字?

比较用于过滤数据表c#的文本框

如何在C#中,文本框不能粘贴功能

asp.net c# 回车enter文本框填满后提交

C# 编辑框添加灰色提示信息

C#文本框边框颜色如何改变