public static void TransferContextMenuForControl(ISheetComponent source) { if (source.sheet != null && source.sheet.form != null && source.sheet.form.contextMenuDuplicators.TryGetValue(source.uiElement, out List <Control> destinations)) { foreach (Control dest in destinations) { dest.ContextMenuStrip = source.uiElement.ContextMenuStrip; } } }
public void RefreshSheet() { //in case we're being called from another thread if (PlayerTextBox.InvokeRequired) { refreshSheetCallback d = new refreshSheetCallback(RefreshSheet); this.Invoke(d, new object[] { }); return; } autoSaveDisabled = true; drawingHelper.SuspendDrawing(); NameTextBox.Text = sheet.name; PlayerTextBox.Text = sheet.player; ChronicleTextBox.Text = sheet.chronicle; LeftComponentTable.Controls.Clear(); LeftComponentTable.RowStyles.Clear(); MiddleComponentTable.Controls.Clear(); MiddleComponentTable.RowStyles.Clear(); RightComponentTable.Controls.Clear(); RightComponentTable.RowStyles.Clear(); int amountOfRows = Convert.ToInt32(Math.Ceiling(sheet.components.Count / 2.0F)); sheet.allowRefreshingMods = false; contextMenuDuplicators.Clear(); for (int i = 0; i < sheet.components.Count; i++) { ISheetComponent component = sheet.components[i]; TableLayoutPanel componentUIElement = new TableLayoutPanel { ColumnCount = 1 }; componentUIElement.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 100F)); componentUIElement.Dock = DockStyle.Fill; componentUIElement.RowCount = 2; componentUIElement.TabIndex = 0; componentUIElement.Size = new Size(292, 26); Label nameLabel = new Label { Anchor = AnchorStyles.None, AutoSize = true, Size = new Size(35, 13), TabIndex = 0 }; nameLabel.Font = new Font(nameLabel.Font, FontStyle.Bold); nameLabel.Text = component.name.Replace('_', ' '); componentUIElement.Controls.Add(nameLabel, 0, 0); Control componentValueElement = component.ConstructUIElement(); componentUIElement.Controls.Add(componentValueElement, 0, 1); //pass on context menu strip to other components as well contextMenuDuplicators.Add(componentValueElement, new List <Control> { componentUIElement, nameLabel }); TransferContextMenuForControl(component); if (component.column == ColumnId.Left) { LeftComponentTable.Controls.Add(componentUIElement); ++LeftComponentTable.RowCount; } else if (component.column == ColumnId.Middle) { MiddleComponentTable.Controls.Add(componentUIElement); ++MiddleComponentTable.RowCount; } else { RightComponentTable.Controls.Add(componentUIElement); ++RightComponentTable.RowCount; } } sheet.allowRefreshingMods = true; //all components refreshed, now apply modification sets sheet.RefreshModifications(false); //add empty tables to be used for padding out each column LeftComponentTable.Controls.Add(new TableLayoutPanel()); ++LeftComponentTable.RowCount; MiddleComponentTable.Controls.Add(new TableLayoutPanel()); ++MiddleComponentTable.RowCount; RightComponentTable.Controls.Add(new TableLayoutPanel()); ++RightComponentTable.RowCount; ResizeColumn(LeftComponentTable); ResizeColumn(MiddleComponentTable); ResizeColumn(RightComponentTable); drawingHelper.ResumeDrawing(true); autoSaveDisabled = false; }