public class ShipInfoLabels\r
{\r
private readonly ShipLabel[][] _labels = new ShipLabel[ShipInfo.MemberCount][];\r
- private const int LabelHpRight = 130;\r
private readonly Label[] _akashiTimers = new Label[ShipInfo.MemberCount];\r
public static Color[] ColumnColors = {SystemColors.Control, Color.FromArgb(255, 250, 250, 250)};\r
\r
var y = top + lh * (i + 1);\r
parent.Controls.AddRange(_labels[i] = new[]\r
{\r
- new ShipLabel {Location = new Point(LabelHpRight, y), AutoSize = true},\r
+ new ShipLabel {Location = new Point(130, y), AutoSize = true, AnchorRight = true},\r
new ShipLabel\r
{\r
Location = new Point(136, y),\r
new ShipLabel {Location = new Point(2, y), AutoSize = true}, // 名前のZ-orderを下に\r
new ShipLabel {Location = new Point(0, y - 2), Size = new Size(parent.Width, lh - 1)}\r
});\r
- _labels[i][0].SizeChanged += labelHP_SizeChanged;\r
foreach (var label in _labels[i])\r
{\r
label.Scale(ShipLabel.ScaleFactor);\r
parent.ResumeLayout();\r
}\r
\r
- private void labelHP_SizeChanged(object sender, EventArgs e)\r
- {\r
- var label = (Label)sender;\r
- label.Location =\r
- new Point((int)Math.Round(LabelHpRight * ShipLabel.ScaleFactor.Width) - label.Width, label.Top);\r
- }\r
-\r
public void SetShipInfo(ShipStatus[] statuses)\r
{\r
var empty = new ShipStatus();\r
{\r
public static SizeF ScaleFactor { get; set; }\r
public Color PresetColor { get; set; }\r
+ public bool AnchorRight { get; set; }\r
+ private int _right = int.MinValue;\r
+ private int _left;\r
\r
public void SetName(ShipStatus status)\r
{\r
var t = status.RepairTime;\r
Text = string.Format(@"{0:d2}:{1:mm\:ss}", (int)t.TotalHours, t);\r
}\r
+\r
+ protected override void OnLayout(LayoutEventArgs levent)\r
+ {\r
+ base.OnLayout(levent);\r
+ if (!AnchorRight)\r
+ return;\r
+ if (_right == int.MinValue || _left != Left)\r
+ {\r
+ _right = Right;\r
+ _left = Left;\r
+ return;\r
+ }\r
+ if (_right == Right)\r
+ return;\r
+ _left -= Right - _right;\r
+ Location = new Point(_left, Top);\r
+ }\r
}\r
}
\ No newline at end of file
private readonly Config _config;\r
private const int LabelHeight = 12;\r
private const int LineHeight = 16;\r
- private const int HpLabelRight = 126;\r
private const int PanelWidth = 232;\r
private ShipStatus[] _currentList;\r
private readonly List<ShipLabel[]> _labelList = new List<ShipLabel[]>();\r
},\r
new ShipLabel {Location = new Point(73, 1), AutoSize = true}\r
};\r
+ _repairLabelList.Add(rpl);\r
+ _repairPanelList.Add(rpp);\r
+// ReSharper disable once CoVariantArrayConversion\r
+ rpp.Controls.AddRange(rpl);\r
+ panelShipList.Controls.Add(rpp);\r
foreach (var label in rpl)\r
{\r
label.Scale(ShipLabel.ScaleFactor);\r
label.PresetColor =\r
label.BackColor = ShipInfoLabels.ColumnColors[(i + 1) % 2];\r
}\r
- _repairLabelList.Add(rpl);\r
- _repairPanelList.Add(rpp);\r
-// ReSharper disable once CoVariantArrayConversion\r
- rpp.Controls.AddRange(rpl);\r
- panelShipList.Controls.Add(rpp);\r
}\r
\r
private void CreateShipLabels(int i)\r
lbp.Tag = lbp.Location.Y;\r
var labels = new[]\r
{\r
- new ShipLabel {Location = new Point(HpLabelRight, 1), AutoSize = true},\r
+ new ShipLabel {Location = new Point(126, 1), AutoSize = true, AnchorRight = true},\r
new ShipLabel\r
{\r
Location = new Point(132, 1),\r
new ShipLabel {Location = new Point(1, 1), AutoSize = true},\r
new ShipLabel {Location = new Point(0, 0), Size = new Size(PanelWidth, lh - 1)}\r
};\r
+ _labelList.Add(labels);\r
+ _labelPanelList.Add(lbp);\r
+// ReSharper disable once CoVariantArrayConversion\r
+ lbp.Controls.AddRange(labels);\r
+ panelShipList.Controls.Add(lbp);\r
foreach (var label in labels)\r
{\r
label.Scale(ShipLabel.ScaleFactor);\r
label.PresetColor =\r
label.BackColor = ShipInfoLabels.ColumnColors[(i + 1) % 2];\r
}\r
- _labelList.Add(labels);\r
- _labelPanelList.Add(lbp);\r
-// ReSharper disable once CoVariantArrayConversion\r
- lbp.Controls.AddRange(labels);\r
- panelShipList.Controls.Add(lbp);\r
- labels[0].SizeChanged += labelHP_SizeChanged;\r
}\r
\r
private void SetShipLabels()\r
return comboBoxGroup.Text == "修復";\r
}\r
\r
- private void labelHP_SizeChanged(object sender, EventArgs e)\r
- {\r
- var label = (Label)sender;\r
- label.Location = new Point(\r
- (int)Math.Round(HpLabelRight * ShipLabel.ScaleFactor.Width - label.Width), label.Top);\r
- }\r
-\r
private void ShipListForm_Load(object sender, EventArgs e)\r
{\r
panelShipList.Width = (int)Math.Round(PanelWidth * ShipLabel.ScaleFactor.Width) + 3 +\r