【问题标题】:Accessing a Tab Control From Second Form And Inserting The Form Into First Form Tab Control从第二个表单访问选项卡控件并将表单插入到第一个表单选项卡控件
【发布时间】:2018-07-04 01:51:07
【问题描述】:

请,我在使用 tabControl 时遇到了一个小问题。我有一个 tabControl,它在第一个表单上。最初,我在尝试从另一个表单访问 tabControl 时遇到问题。但后来我通过将设计器中的控件可访问性从私有更改为公共找到了出路。 但是,当我尝试从选项卡内部显示时,它不起作用。但是从第一个表单开始,我可以轻松地将其他表单放入标签页中,因为我在那里拥有控制权。换一种形式,我有困难。

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

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;
        }

这是试图将表单包含在 tabcontrol 中的代码。

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 天。

【问题讨论】:

    标签: c# winforms c#-4.0


    【解决方案1】:

    你试过了吗:

    tabpage.Controls.Add(pd)
    

    更新:

    程序.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);
           }
    }
    

    第三种形式的窗口或其他:

    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();
    }
    

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

    【讨论】:

    • @Godymn 抱歉,我刚刚意识到您正在从另一个表单操作主表单。您需要公开一个静态表单,以便您可以跨表单进行操作。
    • 你的主要老板!非常感谢。这就像一个魅力!!!!再次感谢您,我很感激。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多