0

Form1.cs我有

public const int n = 30;
public TabPage[] tp = new TabPage[n];

private void toolStripSeparator1_Click(object sender, EventArgs e)
{
    RenameFunc rf = new RenameFunc();
    rf.ShowDialog();
}

RenameFunc.cs我有

private void button1_Click_1(object sender, EventArgs e)
{
    Form1 frm1 = new Form1();

    if (textBox1.Text != null)
    /*Line 24 */    frm1.tp[Array.IndexOf(frm1.tp, frm1.tabControl1.SelectedTab)].Text = textBox1.Text;
    Application.Exit();

}

tabControl1 也设置为公共

在第 24 行我得到错误

System.NullReferenceException:对象引用未设置为对象的实例。在 System.Windows.Forms.TabControl.get_SelectedTabInternal() 在 System.Windows.Forms.TabControl.get_SelectedTab() 在 Notepad1._0.RenameFunc.button1_Click_1(Object sender, EventArgs e) 在 D:\C#\Notepad1.0\Notepad1 .0\RenameFunc.cs:第 24 行

如何纠正?

4

3 回答 3

2

我不知道是什么tp,但是,我确定它没有初始化,这给出了异常。
原因在上一行很容易找到

Form1 frm1 = new Form1();

在这里,您创建 Form1 的一个新实例。您没有引用从中调用 RenameFunc 的第一个 Form1。

例如,当您调用 RenameFunc 时,也许您可​​以传递对正确 Form1 的引用

RenameFunc rf = new RenameFunc(this); 

并将该引用保存在您的 RenameFunc 内部变量中

public partial class RenameFunc : Form
{
    private Form1 _caller = null;
    public RenameFunc(Form1 f)
    {
         InitializeComponent();
         _caller = f;       
    }

}

并在 button1_Click_1 中使用该引用而不是 new Form1

   if (textBox1.Text != null)           
        _caller.tp[Array.IndexOf(_caller.tp, _caller.tabControl1.SelectedTab)].Text =
                   textBox1.Text;           
   Application.Exit();       

然而,关于 tp 的一点解释将是有益的

于 2012-07-03T13:37:29.867 回答
1

您可以执行以下操作,

 Form1 frm = (Form1)this.Parent;

您可以使用它来访问控件frm.Controls并按照您的喜好进行操作。

于 2012-07-03T13:42:05.500 回答
0

它返回错误,告诉您在 frm1.tabControl1.SelectedTab中找不到frm1.tp,您的代码都没有将 30 个标签页tp与您显示的标签页相关联,因此,通过制作astabControl1的新副本,然后要求将标签页的名称放在文本框在寻找选中时,答案是,这些新页面都没有被选中。form1frm1

于 2012-07-03T13:48:52.157 回答