2012-07-03 47 views
0

Form1.cs中我有C#打开窗体从另一个形状误差

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也seted TU公开

行24我得到错误

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

如何更正?

+0

你正在隐藏一些东西。 :)什么是'frm1.tp'?你为什么要创建一个'Form1'的新实例? – J0HN

+1

我会建议你不要直接访问RenameFunc.cs中的tabControl。您应该在Form1.cs中实现一个Property,其中包含Tabcontrol的选定Tab。 – Tomtom

回答

2

我不知道tp是什么,但是,我确定它没有被初始化,并且这个例外。
究其原因,很容易在上一行

Form1 frm1 = new Form1(); 

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

也许你能传递到正确的Form1中的参考,当你调用RenameFunc,例如

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一点解释将是有益的

+0

为什么-1?这回答了这个问题。 –

1

你可以做如下,

Form1 frm = (Form1)this.Parent; 

您可以访问使用frm.Controls控制和做笏ü喜欢用它做。

+0

给我例子plz –

+0

你可以使用frm.Controls.FindControl(urcontrolname)作为ur控件 –

0

它回来与错误告诉你,frm1.tabControl1.SelectedTabfrm1.tp发现,没有你的代码通过制作form1新副本frm1tptabControl1你显示30个TabPage相关联,因此,再要求在查找所选内容时在文本框中放置标签页的名称,答案是,没有选择这些新页面。

相关问题