我有一个带有文本框和数据网格视图的表单页面以及包含选项卡控件的其他表单。我想在第二种形式中添加第一个表单选项卡。我尝试编写要显示的表单的代码,但它比选项卡容器大,并且不适合。只有表格的一半出现。
这是我的代码:
private void tcMainPage_SelectedIndexChanged(object sender, EventArgs e)
{
if (tcMainPage.SelectedIndex == 0)
{
GTOWN.PrintingPage BookInfo = new PrintingPage();
BookInfo.TopLevel = false;
BookInfo.FormBorderStyle = FormBorderStyle.None;
BookInfo.Dock = DockStyle.Fill;
tpSearch.Controls.Add(BookInfo);
BookInfo.Show();
}
}
答案 0 :(得分:0)
表单是最顶层的对象,不能放在其他容器中。
您可能希望重构代码,以便表单上的项目位于UserControl上。此时,您可以将UserControl添加到Form和TabControl
public UserControl myControl(){ /* copy your current view code here */}
public Form myForm(){
Controls.Add(new myControl());
}
public Form myTabbedForm(){
var tabControl = new TabControl();
var page1 = new TabPage();
page1.Controls.Add(new myControl());
tabControl.TabPages.Add(page1);
this.Controls.Add(tabControl);
}
答案 1 :(得分:0)
将主FORM设置为容器。
yourForm.IsMdiContainer = true;
然后将子表单添加到tabPage:
private void tcMainPage_SelectedIndexChanged(object sender, EventArgs e)
{
if (tcMainPage.SelectedIndex == 0)
{
PrintingPage newFrm = new PrintingPage
{
MdiParent = this,
// This set the form parent as the tabClicked
Parent = tcMainPage.TabPages[0]
};
newFrm.Show();
}
}
答案 2 :(得分:0)
答案 3 :(得分:0)
我遇到了这个问题,如果有帮助,我创建了这个
public void addform(TabPage tp, Form f)
{
f.TopLevel = false;
//no border if needed
f.FormBorderStyle = FormBorderStyle.None;
f.AutoScaleMode = AutoScaleMode.Dpi;
if (!tp.Controls.Contains(f))
{
tp.Controls.Add(f);
f.Dock = DockStyle.Fill;
f.Show();
Refresh();
}
Refresh();
}