【问题标题】:Looping through textbox controls in a panel control循环访问面板控件中的文本框控件
【发布时间】:2014-06-19 13:34:18
【问题描述】:

我正在尝试创建一个包含从文本框中提取的订单详细信息的 csv。我有面板控件,里面有 12 个文本框,我想将每个文本框的文本写入 csv 中的新行,但什么也没发生,文件被创建但没有文本。

这是我的代码:

FileStream file = new FileStream(string.Format(@"Z:\Stream\order{0}.csv", txtName.Text),FileMode.OpenOrCreate);
StreamWriter wr = new StreamWriter(file);
wr.WriteLine(txtName.Text);
wr.WriteLine(txtOrderRef.Text);

List<TextBox> textboxControls = new List<TextBox>();

foreach (TextBox controls in Panel1.Controls)
{
    textboxControls.Add(controls);
}

foreach(TextBox c in textboxControls)
{
    wr.WriteLine(c.Text);
    Label1.Text = c.Text + "<br />";

}

wr.Close();

【问题讨论】:

  • panelName.Controls.OfType&lt;TextBox&gt;() 会给你一个所有文本框的列表,你的文本框里有文本吗?
  • 嗯,需要 2 个循环吗?顺便说一句,我建议对 StreamWriter 使用 try 和 catch。
  • 是的说我的文本框里面有文字

标签: c# asp.net stream


【解决方案1】:

您不需要循环两次,还需要检查控件是否为文本框,尝试使用is 构造,如下所示:

FileStream file = new FileStream(string.Format(@"Z:\Stream\order{0}.csv",       txtName.Text),FileMode.OpenOrCreate);
StreamWriter wr = new StreamWriter(file);
wr.WriteLine(txtName.Text);
wr.WriteLine(txtOrderRef.Text);

List<TextBox> textboxControls = new List<TextBox>();

foreach (var control in Panel1.Controls)
{
   if(control is TextBox)
   {
      Textbox tb = control as TextBox;
      wr.WriteLine(tb.Text);
      textboxControls.Add(tb); //not needed in this context, but may be used in code elsewhere
   }
}

【讨论】:

  • 谢谢 Chris 尝试了两个答案,它们都有效
【解决方案2】:

我想你的问题在于流的关闭,你应该使用 using

using(StreamWriter wr = new StreamWriter(file))
{
    wr.WriteLine(txtName.Text);
    wr.WriteLine(txtOrderRef.Text);

    foreach (var control in Panel1.Controls.OfType<TextBox>())
    {
        wr.WriteLine(control.Text);
    }
}

【讨论】:

  • 不用担心,很高兴它有帮助。
猜你喜欢
  • 2014-02-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多