/// <summary> /// Создать экземпляр Presenter и добавить в словарь. /// </summary> private void CreateNewCommPresenter(BarometerControlView inBarometerControlView, DeviceBRS1MViewModel deviceBRS1M) { // После того, как интерфейс готов, надо придумать как подпихнуть экземпляр интерфейса в Presenter. // В данном случае, для простой задачи, можно сделать это через конструктор, // в более сложных ситуациях Presenter может получать ссылку на конкретный экземпляр через специальную фабрику представлений // или даже сам являться фабрикой, порождающий необходимые Представления в зависимости от ситуации. CommPresenter oneCommPresenter = new CommPresenter(inBarometerControlView, managerPorts, deviceBRS1M); Presenters.Add(inBarometerControlView.Name, oneCommPresenter); }
/// <summary> /// Расположить контрол на пенели. /// </summary> /// <param name="inBarometerControlView"></param> /// <param name="indexRow"></param> private void AddBarometerControlToPanel(BarometerControlView inBarometerControlView) { tlpBarometers.SuspendLayout(); tlpBarometers.RowCount = tlpBarometers.RowCount + 1; tlpBarometers.RowStyles.Add(new RowStyle(SizeType.AutoSize, inBarometerControlView.Height)); tlpBarometers.Controls.Add(inBarometerControlView, 0, tlpBarometers.RowCount);// последний добавляемый должен быть всегда внизу tlpBarometers.ResumeLayout(false); tlpBarometers.Height = inBarometerControlView.Height * tlpBarometers.Controls.Count; tlpBarometers.ScrollControlIntoView(inBarometerControlView); tlpBarometers.Refresh(); }
/// <summary> /// Подсветить выделенный в ComboBoxControlsToDelete контрол на панели. /// Сам ComboBoxControlsToDelete заполнен. /// </summary> /// <param name="inBarometerControlView"></param> private void HighlightingSelectedControl(BarometerControlView inBarometerControlView) { foreach (UserControl _userControl in tlpBarometers.Controls) { _userControl.BackColor = SystemColors.Control; } inBarometerControlView.BackColor = Color.LightBlue; if (ComboBoxControlsToDelete.ComboBoxToDelete.ComboBoxControlsToDelete.SelectedIndex != -1) { tslDeleteBarometer.Enabled = true; tlpBarometers.ScrollControlIntoView(inBarometerControlView); } else { tslDeleteBarometer.Enabled = false; } }
/// <summary> /// Удалить контрол по заданному индексу из панели. /// </summary> /// <param name="selectedIndex"></param> private void RemoveAtBarometerControlView(int selectedIndex) { ClosePortAllPresenters(); BarometerControlView mBarometerControlView = (BarometerControlView)ComboBoxControlsToDelete.ComboBoxToDelete.ComboBoxControlsToDelete.Items[selectedIndex]; Presenters.Remove(mBarometerControlView.Name); ComboBoxControlsToDelete.ComboBoxToDelete.ComboBoxControlsToDelete.Items.Remove(mBarometerControlView); // чтобы не удалять из панели конкретный элемент, так кака может сбиться соответствие индексов // между ComboBoxControlsToDelete и tlpBarometers, произвести заполнение панели с нуля tlpBarometers.Controls.Clear(); tlpBarometers.RowCount = 0; tlpBarometers.RowStyles.Clear(); tlpBarometers.AutoScroll = false; tlpBarometers.Height = 100; for (int J = 0; J < mMainViewModel.PartWorkspace.CurrentPart.DeviceDetaills.Count; J++) { AddBarometerControlToPanel((BarometerControlView)ComboBoxControlsToDelete.ComboBoxToDelete.ComboBoxControlsToDelete.Items[J]); } tlpBarometers.AutoScroll = true; }
/// <summary> /// Добавить новый контрол по заданному индексу на панель. /// Перегруженный. /// </summary> /// <param name="indexRow"></param> private void AddNewBarometerControlView(DeviceBRS1MViewModel deviceBRS1M) { ClosePortAllPresenters(); tslDeleteBarometer.Enabled = false; allControlsCount += 1; BarometerControlView mBarometerControlView = new BarometerControlView { BorderStyle = BorderStyle.Fixed3D, Dock = DockStyle.Fill, TabIndex = tlpBarometers.RowCount, Name = USER_CONTROL_BAROMETER + allControlsCount, Tag = (string)deviceBRS1M.ParameterName }; ComboBoxControlsToDelete.ComboBoxToDelete.ComboBoxControlsToDelete.Items.Add(mBarometerControlView); AddBarometerControlToPanel(mBarometerControlView); HighlightingSelectedControl(mBarometerControlView); ComboBoxControlsToDelete.ComboBoxToDelete.ComboBoxControlsToDelete.Text = string.Empty; CreateNewCommPresenter(mBarometerControlView, deviceBRS1M); }