如果已经解决了这一点,我深表歉意,但我找不到适合我确切情况的情况。所以这里...
我有一个主体,其中包含一个停靠在左侧的toolstrip1,该刀具可作为垂直导航栏。我有一个面板(pnlmain)填充表格的其余部分。我想使用pnlmain显示由WIN表格类组成的不同表格。目前,我可以单击ToolStip1上的标签/按钮以在PNLMAIN中显示不同的表单。
private void tsLblCustomers_Click(object sender, EventArgs e)
{
hidePanels();
CustomerReport cr = new CustomerReport();
cr.TopLevel = false;
cr.AutoScroll = true;
cr.BackColor = Color.White;
pnlMain.Controls.Add(cr);
cr.Show();
}
我现在想做的是在pnlmain 中显示其他表单,通过单击另一个表单上的按钮上的一个按钮,而不是toolstrip1上的标签/按钮。我的一些表格如下:客户报告,addCustomer,implyeereport,Addemployee。报告表格链接到我的工具条按钮。添加表格链接到报告表格上的按钮。我尝试了几件事,包括以下内容:
1)在CustomerReport上,我尝试创建一个Mainform实例,然后我将创建一个AddCustomer的实例,然后将该实例添加到Mainform上的面板中。2)我还尝试在Mainform中创建一种方法来创建AddCustomer的实例,然后从CustomerReport上的"添加"按钮调用该方法。即使代码与Mainform上的工具分配按钮相同,它也无法正常工作。
我尝试了隐藏表格的不同变化,显示表格,清除面板,设置为True或false,我无法使其正常工作。在某些情况下,我设法隐藏了客户报告,但是AddCustomer不会出现。在某个时候,我认为我创建了一个新的Mainform实例,并且我的代码不会影响已经打开的原始形式。我只是迷路了。我应该使用其他设计吗?最初,我设置了我的应用程序以隐藏一个表单,然后显示另一个表单,但我读到那是"可怕的设计"。
这听起来与此线程非常相似:在表单内创建表单
您想研究MDI。
听起来好像是您的目标是一个有内聚的互动窗口。否则,如果您只想单独的窗口弹出窗口,则可以在其他形式中创建属性,并在返回Dialogresult后阅读它们。我不确定为什么在不了解程序上下文的情况下这是不好的设计。
//Optionally do a hide(); here.
AddCustomer customer = new AddCustomer();
DialogResult result = customer.ShowDialog();
if(result == DialogResult.OK)
{
var name = customer.Name;
//More properties or whatever here.
}
//The properties would still be accessible here, too.
我最终将工具条级别放在主窗口的左侧,然后在窗口的主要部分中创建了一个面板。所有表格均显示在面板中。每次单击NAV栏中的标签选项之一,都会从面板上清除当前表单并显示活动表单。
private void tsLblCustomers_Click(object sender, EventArgs e)
{
pnlMain.Controls.Clear();
CustomerReport cr = new CustomerReport();
cr.TopLevel = false;
cr.AutoScroll = true;
cr.BackColor = Color.White;
pnlMain.Controls.Add(cr);
cr.Show();
}
private void tsLblEmployees_Click(object sender, EventArgs e)
{
pnlMain.Controls.Clear();
EmployeeReport emp = new EmployeeReport();
emp.TopLevel = false;
emp.AutoScroll = true;
emp.BackColor = Color.White;
pnlMain.Controls.Add(emp);
emp.Show();
}
private void tsLblVendors_Click(object sender, EventArgs e)
{
pnlMain.Controls.Clear();
VendorReport vend = new VendorReport();
vend.TopLevel = false;
vend.AutoScroll = true;
vend.BackColor = Color.White;
pnlMain.Controls.Add(vend);
vend.Show();
}
private void MainForm_Load(object sender, EventArgs e)
{
WelcomeForm welcome = new WelcomeForm();
welcome.TopLevel = false;
welcome.AutoScroll = true;
welcome.BackColor = Color.White;
pnlMain.Controls.Add(welcome);
welcome.Show();
}