C# 如何将文本框中的文本放入现有文本文件?

C# 如何将文本框中的文本放入现有文本文件?,c#,visual-studio,C#,Visual Studio,假设我的c#程序中有一个文本框。如何使我放置在文本框中的文本发送到现有的文本文件。然后在文本框中的文本消失后删除文本?我将尝试为您提供几行代码,然后根据您的需要调整它们 首先,您需要放置一个名为myTxt的文本框,并侦听两个事件: 文本更改:用于查看文本框何时更改其文本 离开:用于知道用户何时离开文本框 您可以认为TextChanged已经足够了,但是由于您必须将数据写入文件(操作缓慢),因此最好不要在用户更改文本框的内容时这样做。 当用户停止键入大约两秒钟时,我们会将数据写入文件 这是Te

假设我的c#程序中有一个文本框。如何使我放置在文本框中的文本发送到现有的文本文件。然后在文本框中的文本消失后删除文本?

我将尝试为您提供几行代码,然后根据您的需要调整它们

首先,您需要放置一个名为myTxt的文本框,并侦听两个事件:

  • 文本更改:用于查看文本框何时更改其文本
  • 离开:用于知道用户何时离开文本框
您可以认为TextChanged已经足够了,但是由于您必须将数据写入文件(操作缓慢),因此最好不要在用户更改文本框的内容时这样做。 当用户停止键入大约两秒钟时,我们会将数据写入文件

这是TextChanged事件的代码:

    private Timer timer { get; set; }

    private void myTxt_TextChanged(object sender, EventArgs e)
    {
        if (timer == null)
        {
            timer = new Timer
            {
                Interval = 2000,
                Enabled = true
            };
            timer.Tick += Timer_Tick;
            timer.Start();
        }
        else
        {
            timer.Stop();
            timer.Start();
        }
    }

    private void Timer_Tick(object sender, EventArgs e)
    {
        myTxt.Invoke(new Action(() =>
        {
            timer.Stop();
            var fileContent = myTxt.Text ?? string.Empty;
            File.WriteAllText(@"E:\temp\stack.txt", fileContent);
        }));
    }
如你所见:

  • 我们用定时器
  • 在TextChanged事件中,我们第一次初始化它,然后在用户更改文本(类型)时重置它
  • 当用户停止键入两秒钟时,计时器进入勾号事件,您可以读取文本框的值并将其写入文件。由于线程问题,我们从Invoke方法传递
这可能足够了,但为了不使用不必要的资源,我们必须在不需要计时器时尽快处理它。为此,我们将侦听文本框的“离开”事件:

    private void myTxt_Leave(object sender, EventArgs e)
    {
        if (timer != null)
        {
            timer.Stop();
            timer.Tick -= Timer_Tick;
            timer.Dispose();
            timer = null;
        }
    }
我希望这就是你需要的

然后在文本框中的文本消失后删除该文本

是否要将文本框中的文本实时保存到文本文件中?你可以试着订阅

如果是,您希望将文本附加到哪里?下面是一个向末尾的新行添加文本的演示

// check if add a new line
bool edited = false;

string fileName = @"D://test.txt";

private void textBox1_TextChanged(object sender, EventArgs e)
{
    if(edited)
    {
        // remove edited line
        string[] lines = File.ReadAllLines(fileName);
        Array.Resize(ref lines, lines.Length - 1);
        File.WriteAllLines(fileName, lines);
    }

    using (System.IO.StreamWriter file =
    new System.IO.StreamWriter(fileName, true))
    {
        file.WriteLine(((TextBox)sender).Text);
        // first edit, set true
        edited = true;
    }
}

你试过什么?你得到了什么结果?@myselfmiqdad我真的没怎么试过。。。我很无知。我问我的一个朋友他是否是新手,他说他不知道如何解释,并让我在这里问一个问题。至少你能告诉我们你是在使用WinForm还是WPF吗?你可以看看附加到文本文件的方法。不确定“当文本框中的文本消失时删除文本”是什么意思。你的意思是从档案里?如果是这样的话,如果发生了多个附件,这可能会有点棘手。最好将这种“临时”文本存储在变量中而不是文件中,然后在应用程序关闭时将其写入文件一次。StackOverflow不是一个真正的教程站点。它更多地是为了帮助您解决一个特定的狭义编程问题。将问题分解为以下步骤:从文本框中获取文本、打开文本文件进行写入、写入文本文件、关闭文本文件、检测文本框消失、打开文本文件、搜索文本文件中的文本、删除文本、关闭文本文件。现在完成这些步骤,在网上查找教程。当您在这些步骤中遇到问题时,请询问有关该步骤的问题。为什么在计时器中有
Invoke()
。勾选处理程序?它有什么用?计时器的用途是什么?当用户停止键入2秒钟时,我使用计时器将数据保存到文件中。通过这种方式,我避免了每次用户在文本框中键入字符时的缓慢操作(写入文件)。关于调用,它是必需的,因为计时器和用户可以同时访问文本框。使用invoke方法,通知运行时序列化此访问,因为它们都是从UI线程传递的