将文本框中的数据保存到文本文件

时间:2017-10-18 08:58:44

标签: c# wpf winforms

我正在尝试将文本框中的数据保存到文本文件中。我有一些文本框,所以我想知道是否有另一种方法来做到这一点,而不是必须命名所有的文本框?

这是我所拥有的缩短版本:

string slog = @"StockLog.txt";

StreamWriter raw_data = new StreamWriter(slog, true);
raw_data.WriteLine(
    txt_count.Text + ","
    + date_log.Text + ","
    + txt_key.Text + ","
    + txt_pn.Text + ","
    + txt_desc.Text);

raw_data.Close();

我正在考虑为此制作课程,因为它会被多个页面使用。在wpf和winforms中尝试这个。任何输入将不胜感激。提前谢谢!

4 个答案:

答案 0 :(得分:0)

首先为每个要保存文本框值的窗口中的主网格命名,并使用此方法来帮助您

        string getValuesFromAllTextBox(Grid someGrid)
        {
          string WindowValues="";
          foreach (var item in someGrid.Children)
          {
              if (item is TextBox)
              {
                WindowValues +=((TextBox)item).Text+",";
              }
          }
          if(WindowValues !="")
          WindowValues = WindowValues.TrimEnd(',');

          return WindowValues;
        }

答案 1 :(得分:0)

对于Winforms:

  1. 制作StringBuilder对象
  2. 执行Foreach(在Form.Controls中使用var ctrl)
  3. 如果ctrl是TextBox - 将text属性追加到stringbuilder对象
  4. 如果是容器控件(即GroupBox或Panel) - 对ctrl.Controls重复步骤2-4(而不是步骤2中的Form)
  5. 最后,您将在字符串构建器中拥有所有文本框文本。根据需要使用它。 您可以创建一个单独的类来重用此代码。只需将类/表单对象传递给方法即可。

答案 2 :(得分:0)

您应该考虑使用递归迭代控件。

public string Parse(Control MainControl)
{
   string Result = "";
   foreach (var Ctrl in MainControl.Controls)
   { 
      if (Ctrl.GetType() == TypeOf(TextBox))
      {
          Result += (TextBox)Ctrl.Text + ",";
      }
      if (Ctrl.Controls.Count > 0)
      {
          Result += Parse(Ctrl);
      }
   }
   return Result;
}

答案 3 :(得分:0)

您可以获取表单上的所有控件,包括使用递归的容器内的控件。您可以使用扩展方法:

public static class ControlExtension
{
  public static IEnumerable<Control> GetControls<Control>(this IEnumerable<Control> parent,
        Func<Control, IEnumerable<Control>> childrenSelector)
   {              
        foreach (Control item in parent)
        {
          // Yield parent items
          yield return item;

          // Yield all of the children.
          foreach (Control child in childrenSelector(item).GetControls(childrenSelector))
          {                  
              yield return child;
          }
        }
   }
}

然后你可以使用扩展方法递归地获取所有控件,然后按你想要的类型进行过滤:

var allControls = this.Controls.Cast<Control>().GetControls(x => x.Controls.Cast<Control>());
var onlyTextBoxes = allControls.OfType<TextBox>();

然后您可以使用它来编写输出。