C#使用一个面板作为多种形式的占位符



如果已经解决了这一点,我深表歉意,但我找不到适合我确切情况的情况。所以这里...

我有一个主体,其中包含一个停靠在左侧的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();
    }

相关内容

  • 没有找到相关文章