如何动态地创建一个标签控制标签页与预先存在的Windows窗体在C#

问题描述 投票:0回答:1

正如标题所暗示的,我正在寻找动态创建一个选项卡控件中的标签页。我刚开始学习C#和我正在做的应用程序(如下图所示)是一个通用的股票价格应用程序是与单个用户输入的伟大工程。我想将它扩大到采取多种输入(AMZN - > AMZN,MSFT,OOO跟)。

截至目前它可以处理多个用户输入,但正如你可能已经猜到没有工作的标签控件,它只是覆盖它们的超快速,对数组中的最后一个字符串结束。

我希望能有多个用户输入动态地创建一个包含所有相同的内容作为基本形式,但各有不同的输入参数(每个股票代码)新的标签页。目前,我可以得到它用正确的名称创建新的标签页没有任何问题,它只是填充与内容的选项。我可以把它打印到单一的标签,但它不会打印到所有的人..

Image of base App Form (No tab implementation):

Image of base app

我最大的担心是,我必须做一个重写,使其与动态创建的标签兼容,而是从所有的谷歌搜索我已经做了我还没有碰到过相当多切中时弊一个解决方案来(即动态填充与预先存在形式的内容)

我尝试了我的包裹表单内容建设:

private void btnSubmit_Cick(object sender, EventArgs e)
{
     string userInput = txtUserInput.Text;
     char[] delimiters = { ',', '+', ' ', '-', '_', '.' };
     string[] requests = userInput.Split(delimiters);
     foreach(string str in requests)
     {
          string requestString = str;
          var page = new TabPage(str);
            //Add content to page (i.e. page.Controls.Add(_____))
            //by cloning the base form's controls
            //then finally add the page to the tab control
          tabControl1.TabPages.Add(page);
          page.Select();
     }
}

这种方法似乎只填充正在创建,虽然最后一个标签,它完全盖过由于某些原因,其他现有的标签..

任何帮助是极大的赞赏!

c# winforms dynamic tabcontrol
1个回答
0
投票

一个简单的办法是包你有一个自定义TabPage或其他UserControl现有的应用程序,创建/添加那些你TabControl。提供的属性来设置上的自定义控制适当的数据:

public class StockDataPanel : TabPage
{
  // have Labels, RichTextBoxes, etc to display the data you need


  public string StockSymbol
  {
    set => _stockSymbolLabel.Text = value;
  }

  // etc for other data you need to give to the control to display
}

在您的按钮的单击事件处理程序,创建这个新的控制的一个实例,并适当地填充数据:

private void Button_Click(s, e)
{
  foreach (string stock in stocks)
  {
    StockDataPanel panel = new StockDataPanel();
    panel.StockSymbol = "AMZN";
    panel.CurrentPrice = 387.98m;
    _tabControl.TabPages.Add(panel);
  }
}

这可以让你在自己的控制其包装再利用大部分你已经完成。如果要设置一些属性在一起(例如,高,低,目前的价格),提供一种通吃3个参数的方法;所有3个设置之后就可以再一次更新的小图。

© www.soinside.com 2019 - 2024. All rights reserved.