我正在尝试将文本框中的数据保存到文本文件中。我有一些文本框,所以我想知道是否有另一种方法来做到这一点,而不是必须命名所有的文本框?
这是我所拥有的缩短版本:
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中尝试这个。任何输入将不胜感激。提前谢谢!
答案 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:
最后,您将在字符串构建器中拥有所有文本框文本。根据需要使用它。 您可以创建一个单独的类来重用此代码。只需将类/表单对象传递给方法即可。
答案 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>();
然后您可以使用它来编写输出。