2012-07-03 46 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相關聯,因此,再要求在查找所選內容時在文本框中放置標籤頁的名稱,答案是,沒有選擇這些新頁面。

相關問題