【问题标题】:WPF TextChanged eventWPF TextChanged 事件
【发布时间】:2016-05-11 01:57:10
【问题描述】:

我的 WPF 应用程序中有一个 TextBox 和一个 Button。当用户单击按钮时,它将文本框的文本值保存到 txt 文件中。 因此,基本上当用户在 TextBox 中插入内容时,会触发 TextChaned 事件。问题是,例如,如果用户键入“Daniel”并单击按钮,则用户输入的每个组合也会被保存。我怎样才能摆脱它?

文本文件包含:

D
Da
Dan
Dani
Danie
Daniel

如何仅保存最后一个字符串 (Daniel) 或者是否有任何其他事件处理程序可以解决我的问题? 顺便说一句,这实际上是一个列表,我使用的是 Add 方法。

代码,根据要求:

    // Button, just ignore all the crap inside
    private void saveChangesButton_Click(object sender, RoutedEventArgs e)
    {
        System.IO.File.WriteAllLines(@System.IO.File.ReadAllText(@System.IO.Directory.GetCurrentDirectory() + "/dir.txt") + "/commandline.txt", checkedValues);
    }
    // List 
    private List<String> checkedValues = new List<String>();
    // TextChanged
    private void sWidth_TextChanged(object sender, TextChangedEventArgs e)
    {
        checkedValues.Add(sWidth.Text);
    }

【问题讨论】:

  • 你为什么使用TextChanged事件?如果您只需要保存 Textbox.Text 使用 Button_Click 事件。
  • @ŁukaszMotyczka 如果 TextBox 默认 Text 属性不为空怎么办?我也想保存。
  • 你能发布你的 textchanged 和按钮点击代码吗?
  • 您可以在Window_Loaded 事件中自动保存默认文本框内容值。
  • 那么,如果默认的 TextBox Text 不为空,那么当触发 Button Click 事件时,它将保存您在该 TextBox 中的所有 Text?

标签: c# wpf textchanged


【解决方案1】:

您希望由 Button 的 Click 事件而不是 TextBox 的 TextChanged 事件来处理。

像这样:

private void saveButton_Click(object sender, RoutedEventArgs e)
{
       using (var streamWriter = new StreamWriter("yourtextfile.txt", true))
       {
             streamWriter.WriteLine(textBox.Text);
       }
}

【讨论】:

    【解决方案2】:

    我会尝试这样的:

    // List 
    private List<String> checkedValues = new List<String>();
    
    public int nTextboxChanged = 0;
    
    // Button, just ignore all the crap inside
    private void saveChangesButton_Click(object sender, RoutedEventArgs e)
    {
        if(nTextboxChanged == 1)
        {     
            checkedValues.Add(sWidth.Text);
            System.IO.File.WriteAllLines(@System.IO.File.ReadAllText(@System.IO.Directory.GetCurrentDirectory() + "/dir.txt") + "/commandline.txt", checkedValues);
        }
    }
    
    // TextChanged
    private void sWidth_TextChanged(object sender, TextChangedEventArgs e)
    {
        nTextboxChanged = 1;
    }
    

    【讨论】:

      【解决方案3】:

      您根本不需要 TextChanged 事件。

      xaml

      <TextBox Name="textToSave" />
      <Button Click="saveToTextFile" />
      

      cs

      private void saveToTextFile(...){
         string text = textToSave.Text;
      
         //code to save to text file
      
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多