从第二个窗体访问选项卡控件并将窗体插入第一个窗体选项卡控件

Accessing a Tab Control From Second Form And Inserting The Form Into First Form Tab Control

拜托,我在使用 tabControl 时遇到了一个小问题。我有一个第一种形式的 tabControl。最初,我在尝试从另一个表单访问 tabControl 时遇到了问题。但我后来找到了解决办法,将设计器中的控件可访问性从私有更改为 public。 但是,当我尝试在选项卡内显示 from 时,它不起作用。但是从第一个表单开始,我可以轻松地将其他表单放在标签页中,因为我在那里有控制权。从另一种形式来看,我遇到了困难。

这是一个试图从数据库中搜索数据的代码

patient selectUser = new patient();
        //Get Selected Patient based on end user click from the DataGridView
        public patient GetSelectedUser()
        {
            if (dataGridView1.CurrentRow.Index != -1)
            {
                selectUser.patient_id = Convert.ToInt32(dataGridView1.CurrentRow.Cells["patient_id"].Value);

                using (DbModel db = new DbModel ())
                {
                    selectUser = db.patients.FirstOrDefault(u => u.patient_id == selectUser.patient_id);
                }
            }
            return selectUser;
        }

这是试图将表单包含在选项卡控件中的代码。

StartPage sp = new StartPage();

    private void LoadSelectedUser()
    {
        patient patient = GetSelectedUser();
        if (patient == null)
        {
            MessageBox.Show("cannot load data");
        }
        else
        {

            //Close();
            //StartPage.tt = "";
            //PatientDashboard pd = new PatientDashboard(patient);
            //pd.Show();


            Close();
            PatientDashboard pd = new PatientDashboard(patient);

            TabPage tabpage = new TabPage();
            tabpage.Text = pd.Text;
            sp.tabControl1.TabPages.Add(tabpage);
            pd.TopLevel = false;
            pd.Parent = tabpage;
            pd.Show();
            pd.Dock = DockStyle.Fill;
            sp.tabControl1.SelectedTab = tabpage;
            pd.Show();

        }
    }

我注意到表单的 TopLevel 属性 使表单不显示。 将真诚地感谢任何帮助,因为我已经为此工作了 2 天了。

你试过了吗:

tabpage.Controls.Add(pd)

更新:

program.cs

public static Form1 from;  //<--- important
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
       Application.EnableVisualStyles();
       Application.SetCompatibleTextRenderingDefault(false);
       using (Form1 mainForm = new Form1())
       {
           from = mainForm;

           Application.Run(from);
       }
}

第 3 形式 window 或其他形式:

private void button1_Click(object sender, EventArgs e)
{

    Form2 f2 = new Form2();

    TabPage tabpage = new TabPage();
    tabpage.Text = f2.Text;
    Program.from.tabControl1.TabPages.Add(tabpage);
    f2.TopLevel = false;
    f2.Parent = tabpage;
    f2.Dock = DockStyle.Fill;
    Program.from.tabControl1.SelectedTab = tabpage;
    f2.Show();
}

这应该可以帮助您操作主窗体。