簡體   English   中英

C#從另一個表單錯誤中打開表單

[英]C# Open Form from another Form Error

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也已設置為public

在第24行中,我得到了錯誤

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

如何糾正?

我不知道什么是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的一些解釋將是有益的

您可以執行以下操作,

 Form1 frm = (Form1)this.Parent;

您可以使用frm.Controls來訪問控件,並喜歡使用它。

它返回錯誤,告訴您在frm1.tabControl1.SelectedTab中找不到frm1.tp ,您的代碼都沒有將tp中的30個選項卡與您顯示的tabControl1關聯,因此,將form1的新副本作為frm1 ,然后在尋找選中內容時要求在文本框中放置選項卡頁的名稱,答案是,沒有選擇那些新頁面。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM