private AxSchemeItem[] GetSortArrayBySelected(int sortOrder) { int _sortOrder = sortOrder; string[] _axItemXY = new string[axSuitSchemeView1.SelectedAxSchemeItems.Count]; AxSchemeItem[] _axitemSort = new AxSchemeItem[axSuitSchemeView1.SelectedAxSchemeItems.Count]; int i = 0; foreach (AxSchemeItem item in axSuitSchemeView1.SelectedAxSchemeItems) { Array.Resize <string>(ref _axItemXY, i + 1); Array.Resize <AxSchemeItem>(ref _axitemSort, i + 1); if (sortOrder == 1) { _axItemXY[i] = item.Location.X.ToString("00000"); } else if (sortOrder == 2) { _axItemXY[i] = item.Location.Y.ToString("00000"); } _axitemSort[i] = item; i++; } Array.Sort(_axItemXY, _axitemSort); return(_axitemSort); }
/// <summary> /// 改变水平间距 /// </summary> /// <param name="increment">变动增量,负数为减少,0为清除</param> private void ChangSpaceH(int increment) { if (axSuitSchemeView1.ActivedSchemeItem == null || axSuitSchemeView1.SelectedAxSchemeItems.Count <= 0) { return; } AxSchemeItem[] items = GetSortArrayBySelected(1); int index = 0; //取得参照项的位置和索引 for (int i = 0; i < items.Length; i++) { AxSchemeItem item = items[i]; if (item.Name == axSuitSchemeView1.ActiveControl.Name) { index = i; break; } } //调整,以参照项为准,在参照项左边的 for (int i = index - 1; i >= 0; i--) { AxSchemeItem item = items[i]; if (increment != 0) { item.Location = new Point(item.Location.X + increment * (-1) * (index - i), item.Location.Y); } else { Point pt = item.Location; pt.Offset(-(item.Right - items[i + 1].Left) + 2 * AxSchemeItemBase.MARGIN, 0); item.Location = pt; } } //参照项右边的 for (int i = index + 1; i < items.Length; i++) { AxSchemeItem item = items[i]; if (increment != 0) { item.Location = new Point(item.Location.X + increment * (i - index), item.Location.Y); } else { Point pt = item.Location; pt.Offset(items[i - 1].Right - item.Left - 2 * AxSchemeItemBase.MARGIN, 0); item.Location = pt; } } }
/// <summary> /// 改变垂直间距 /// </summary> /// <param name="increment">变动增量,负数为减少,0为清除</param> private void ChangSpaceV(int increment) { AxSchemeItem[] items = GetSortArrayBySelected(2); int index = 0; //取得参照项的位置和索引 for (int i = 0; i < items.Length; i++) { AxSchemeItem item = items[i]; if (item.Name == axSuitSchemeView1.ActiveControl.Name) { index = i; break; } } //调整,以参照项为准,在参照项上边的 for (int i = index - 1; i >= 0; i--) { AxSchemeItem item = items[i]; if (increment != 0) { item.Location = new Point(item.Location.X, item.Location.Y + increment * (-1) * (index - i)); } else { Point pt = item.Location; pt.Offset(0, -(item.Bottom - items[i + 1].Top) + 2 * AxSchemeItemBase.MARGIN); item.Location = pt; } } //参照项下边的 for (int i = index + 1; i < items.Length; i++) { AxSchemeItem item = items[i]; if (increment != 0) { item.Location = new Point(item.Location.X, item.Location.Y + increment * (i - index)); } else { Point pt = item.Location; pt.Offset(0, items[i - 1].Bottom - item.Top - 2 * AxSchemeItemBase.MARGIN); item.Location = pt; } } }