从第二个窗体访问选项卡控件并将窗体插入第一个窗体选项卡控件
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();
}
这应该可以帮助您操作主窗体。
拜托,我在使用 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();
}
这应该可以帮助您操作主窗体。