在 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也是tu public
第24行我收到错误
System.NullReferenceException:未将对象引用设置为对象的实例。 在System.Windows.Forms.TabControl.get_SelectedTabInternal() 在System.Windows.Forms.TabControl.get_SelectedTab() 在D:\ C#\ Notepad1.0 \ Notepad1.0 \ RenameFunc.cs:第24行的Notepad1._0.RenameFunc.button1_Click_1(对象发件人,EventArgs e)
如何纠正?
答案 0 :(得分: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中使用该引用而不是新的Form1
if (textBox1.Text != null)
_caller.tp[Array.IndexOf(_caller.tp, _caller.tabControl1.SelectedTab)].Text =
textBox1.Text;
Application.Exit();
然而,对tp的一点解释将是有益的
答案 1 :(得分:1)
您可以执行以下操作,
Form1 frm = (Form1)this.Parent;
您可以使用frm.Controls
访问控件,并且确实喜欢使用它。
答案 2 :(得分:0)
它返回时出现错误,告诉您在frm1.tabControl1.SelectedTab
中找不到frm1.tp
,您的代码中没有任何代码将tp
中的30个标签与您tabControl1
的标签相关联因此,通过制作form1
frm1
的新副本,然后在查找所选内容时要求在文本框中放置标签页的名称,答案是,这些新页面都不是地选择。