Как динамически создавать вкладки в элементе управления вкладками с помощью уже существующей формы Windows в C # - PullRequest
0 голосов
/ 06 февраля 2019

Как видно из названия, я стремлюсь динамически создавать вкладки в элементе управления вкладками.Я только начал изучать C #, и приложение, которое я делаю (показано ниже), является универсальным приложением для определения цены акций, которое отлично работает, как и с ОДНОМ пользовательским вводом.Я хотел бы расширить его, чтобы принимать несколько входов (amzn -> amzn, msft, mchp).

На данный момент он обрабатывает несколько пользовательских вводов, но, как вы можете догадаться, не работая Tab Controls, он просто перезаписывает их очень быстро и заканчивается последней строкой в ​​массиве.

Я быхотелось бы, чтобы множественные пользовательские входы динамически создавали новые вкладки, которые содержат все то же содержимое, что и базовая форма, но каждая с разными входными параметрами (каждый символ акции).На данный момент я могу заставить его без проблем создавать новые страницы вкладок с правильными именами, это просто заполнение вкладок содержимым.Я могу заставить его печатать на одной вкладке, но он не будет печатать на всех них ..

Изображение базовой формы приложения (без реализации вкладок):

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();
     }
}

Этот метод только кажетсячтобы заполнить последнюю созданную вкладку, она по какой-то причине стирает все остальные предыдущие вкладки.

Любая помощь приветствуется!

1 Ответ

0 голосов
/ 06 февраля 2019

Простое решение - обернуть то, что у вас есть в существующем приложении, в пользовательский 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 установлены.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...