2011-11-21 128 views
0

我有下面的代码。我觉得我已经非常接近我需要的东西了。在开始时有一个主选项卡(不包含tb,tb1,tb2和tb3),一旦我点击该按钮,将生成一个包含tb,tb1,tb2,tb3的选项卡c#使用system.io保存标签;

tb,tb1,tb2,而不是现有的TB3显示错误。我根本无法弄清楚如何让这些保存。

public partial class Form1 : Form 
    { 
     public string status = "no"; 

     public Form1() 
     { 
      InitializeComponent(); 
     } 

     private void button1_Click(object sender, EventArgs e) 
     { 
      string name = txtName.Text; 


      //validate information 
      try { } 
      catch { } 

      //create new tab 
      string title = name; 
      TabPage myTabPage = new TabPage(title); 
      tabControl1.TabPages.Add(myTabPage); 


      //Add Labels 

      Label lb = new Label(); 
      lb.Text = "Denomination:"; 
      lb.Location = new System.Drawing.Point(150, 75); 
      lb.Name = "lbl"; 
      lb.Size = new System.Drawing.Size(100, 20); 
      myTabPage.Controls.Add(lb); 

      Label lb2 = new Label(); 
      lb2.Text = "Year:"; 
      lb2.Location = new System.Drawing.Point(150, 120); 
      lb2.Name = "lbl2"; 
      lb2.Size = new System.Drawing.Size(100, 20); 
      myTabPage.Controls.Add(lb2); 

      Label lb3 = new Label(); 
      lb3.Text = "Grade:"; 
      lb3.Location = new System.Drawing.Point(150, 165); 
      lb3.Name = "lbl3"; 
      lb3.Size = new System.Drawing.Size(100, 20); 
      myTabPage.Controls.Add(lb3); 

      Label lb4 = new Label(); 
      lb4.Text = "Mint Mark:"; 
      lb4.Location = new System.Drawing.Point(150, 210); 
      lb4.Name = "lbl4"; 
      lb4.Size = new System.Drawing.Size(100, 20); 
      myTabPage.Controls.Add(lb4); 

      //Add text boxes 

      TextBox tb = new TextBox(); 
      tb.Location = new System.Drawing.Point(250, 75); 
      tb.Name = "txt"; 
      tb.Size = new System.Drawing.Size(184, 20); 
      myTabPage.Controls.Add(tb); 

      TextBox tb1 = new TextBox(); 
      tb1.Location = new System.Drawing.Point(250, 120); 
      tb1.Name = "txt1"; 
      tb1.Size = new System.Drawing.Size(184, 20); 
      myTabPage.Controls.Add(tb1); 

      TextBox tb2 = new TextBox(); 
      tb2.Location = new System.Drawing.Point(250, 165); 
      tb2.Name = "txt2"; 
      tb2.Size = new System.Drawing.Size(184, 20); 
      myTabPage.Controls.Add(tb2); 

      TextBox tb3 = new TextBox(); 
      tb3.Location = new System.Drawing.Point(250, 210); 
      tb3.Name = "txt3"; 
      tb3.Size = new System.Drawing.Size(184, 20); 
      myTabPage.Controls.Add(tb3); 

      //put data inside of textboxes 

      tb.Text = txtCoin.Text; 
      tb1.Text = txtYear.Text; 
      tb2.Text = txtGrade.Text; 
      tb3.Text = txtMint.Text; 

      // Add delete button 

      Button bn = new Button(); 
      bn.Location = new System.Drawing.Point(560, 350); 
      bn.Name = "btnDelete"; 
      bn.Text = "Delete"; 
      bn.Size = new System.Drawing.Size(100, 50); 
      bn.Click += MyClick; 
      myTabPage.Controls.Add(bn); 
     } 

     private void MyClick(object sender, EventArgs e) 
     { 
      Form2 myform = new Form2(); 
      myform.ShowDialog(); 




      if (status == "yes") 
      { tabControl1.TabPages.Remove(tabControl1.SelectedTab); } 

      status = "no"; 

     } 

     private void btnExit_Click(object sender, EventArgs e) 
     { 
      this.Close(); 
     } 

     private void Form1_FormClosing(object sender, FormClosingEventArgs e) 
     { 

      int counter; 
      int ccounter; 
      string outLine ; 

      string pathFileName = Path.Combine(Application.StartupPath, "coins.dat"); 

      StreamWriter writeIt = new StreamWriter(pathFileName); 


      foreach (TabPage tabPage in tabControl1.TabPages) 
      { 


       if (tabControl1.TabCount > 1) 
       { 
        outLine = tabPage + tb.Text + tb1.Text + tb2.Text + tb3.Text + "\t"; 
        writeIt.WriteLine(outLine); 
       } 

       if (tabControl1.TabCount == 1) 
       { 
        outLine = tabPage + "\t"; 
        writeIt.WriteLine(outLine); 
       } 
      } 


      writeIt.Close(); 

     } 
    } 
} 
+0

**你会得到什么错误**以及在哪里? – SLaks

+0

我得到tb,tb1,tb2和tb3不存在的错误,因此它不会编译它不能保存任何东西。在我的form_closing中的第一个If语句中,技术上需要更改,因为第一个表单不包含tb,tb1,tb2,tb3。只有动态生成的选项卡才能获取这些变量。 – user1057227

回答

1

您需要存储tb1等在你的表单字段,以便他们可以通过其他方法来访问。

+0

tb1实际上是一个文本框,为什么不能从这里拉? – user1057227

+1

@ user1057227:因为它是**本地**变量。你需要了解字段和变量。 – SLaks

1

tb,tb1,tb2和tb3显示不存在的错误。

是的,他们会 - 你声明它们是局部变量button1_Click之内。要从其他方法访问它们,您需要检查标签页中的控件,或者将其声明为实例变量。但是,在这种情况下,您需要考虑可能存在多个标签页的事实。

这听起来像是你真的只需要遍历每个标签页中的控件,并挑选出文本框。要么是,要么创建自己的子类TabPage,它知道文本框。然后,您可以找到您的自定义TabPage的每个实例,并要求它自行保存。

+0

那么,他们实际上只是文本框,我不明白为什么我不能从他们那里拉数据。 – user1057227

+0

@ user1057227:你可以 - 但是你不能引用你用另外一种方法声明的局部变量。你很了解这门语言如何工作 - 不要仅仅为你当前的问题寻找解决方案;尝试了解错误来自哪里。 –

+0

我想我有点看你说什么,所以它需要被声明为一个实例可变。对于tb.Text = txtCoin.Text你会如何做到这一点? – user1057227