正如标题所示,我正在寻找在Tab控件内动态创建Tab页面的方法。我刚刚开始学习C#,而我正在制作的应用程序(如下所示)是一个通用的股票价格应用程序,与单个用户输入一样,它的运行情况也很好。我想将其扩展为接受多个输入(amzn-> amzn,msft,mchp)。
截至目前,它可以处理多个用户输入,但是您可能会猜测,如果不使用Tab控件,它将以超快的速度覆盖它们并以数组中的最后一个字符串结尾。
我希望能够有多个用户输入来动态创建新的选项卡页面,该选项卡页面包含与基本表单相同的所有内容,但每个页面具有不同的输入参数(每个股票代号)。目前,我可以用正确的名称创建新的选项卡页面,而不会出现任何问题,它只是用内容填充了选项卡。我可以将其打印到单个选项卡,但不会将其打印到所有选项卡。
我最大的担心是,我必须进行重写以使其与动态创建的选项卡兼容,但是从我进行的所有谷歌搜索中,我还没有遇到能够达到此目的的解决方案(即使用预先存在的表单内容动态填充)
我尝试将表单内容构建包装在:
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();
}
}
该方法似乎只填充最后创建的选项卡,由于某种原因,它会抹去所有其他先前的选项卡。
非常感谢您的帮助!
答案 0 :(得分: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
}
在按钮的click事件处理程序中,创建此新控件的实例并适当地填充数据:
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个之后再更新一次小图。