C# 将文本框中的数据保存到文本文件中
我正在尝试将文本框中的数据保存到文本文件中。我有一些文本框,所以我想知道是否有其他方法可以做到这一点,而不是必须命名所有的文本框 以下是我所拥有内容的简化版本:C# 将文本框中的数据保存到文本文件中,c#,wpf,winforms,C#,Wpf,Winforms,我正在尝试将文本框中的数据保存到文本文件中。我有一些文本框,所以我想知道是否有其他方法可以做到这一点,而不是必须命名所有的文本框 以下是我所拥有内容的简化版本: string slog = @"StockLog.txt"; StreamWriter raw_data = new StreamWriter(slog, true); raw_data.WriteLine( txt_count.Text + "," + date_log.Text + "," + txt_ke
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中都尝试此功能。如有任何意见,将不胜感激。提前谢谢 首先在要保存文本框值的每个窗口中为主网格指定一个名称,并使用此方法帮助您
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;
}
对于Winforms:
您可以创建一个单独的类来重用此代码。只需将类/窗体对象传递给方法。 应考虑用递归迭代控件。
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;
}
可以使用递归获取窗体上的所有控件,包括容器中的控件。您可以对其使用扩展方法:
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;
}
}
}
}
公共静态类ControlExtension
{
公共静态IEnumerable GetControls(此IEnumerable父级,
Func儿童选择器)
{
foreach(父项中的控制项)
{
//生成父项
收益回报项目;
//让出所有的孩子。
foreach(childrenSelector(项)中的控件子项.GetControls(childrenSelector))
{
退换子女;
}
}
}
}
然后可以使用extension方法递归获取所有控件,然后按所需类型进行筛选:
var allControls = this.Controls.Cast<Control>().GetControls(x => x.Controls.Cast<Control>());
var onlyTextBoxes = allControls.OfType<TextBox>();
var allControls=this.Controls.Cast().GetControls(x=>x.Controls.Cast());
var onlytextboxs=allControls.OfType();
然后,您可以使用它来编写输出。确定这会保存它-但是在读回它时-如果任何值中有逗号怎么办?无论你做什么,你都必须给这些文本框命名——否则你如何从它们那里获取数据,即使它们是a、b、c、d、e、f等。CI确保任何文本框中都有逗号,你想保存表单上的所有文本框还是只保存指定的文本框?@Riv表单中的所有文本框:)我有一堆文本框,所以我决定不在上面的示例代码中包含所有你知道这是网格的地方?WPF中的每个窗口都有网格如果文本框不在网格中,请替换用你正在使用的容器项进行网格,如果容器有具有控件的容器怎么办?@Riv他应该使用递归,而不是在第4页检查类型。@Michal-是的,我相信nik会考虑清楚的。p.S。不确定相同的解决方案是否适用于WPF和WinForms。