【发布时间】:2019-05-28 01:21:37
【问题描述】:
我在另一个面板(此面板位于用户控件中)中为我的面板提供了一个固定位置和一个最大尺寸,该尺寸随其中面板的大小而变化。调整大小或位置都不能正常工作。调整大小确实发生了,但它很快。如果您只有 1 个用于输出和输入的针板,则该位置很好。当您有超过 1 个位置时,位置是固定的,但您需要调整面板大小以调整大小以查看其他面板。如果您发现问题,能否指出我正确的方向?
在这种情况下,我有一个面板 drawPanel,我将其用作用户控件的一种背景。在这个drawPanel里面,我放置了pinpanels。我希望这些 pinpanels 使用用户控件调整大小并给它们一个固定位置
private void OnClickPinPanel(object source, EventArgs e)
{
if (source is PinPanel p)
{
int index;
if ((index = Array.IndexOf(inputPins, p)) >= 0)
{
ClickedPinPanel?.Invoke(index, true);
}
else
{
ClickedPinPanel?.Invoke(Array.IndexOf(outputPins, p), false);
}
}
//else log here
}
private void CreatePinPanels(bool isInput)
{
int x = 0;
int y = -(int)(this.Width * 0.05)/2;
if (isInput)
{
for (int i = 0; i < inputPins.Length; i++)
{
y += (i + 1) * (this.Height / inputPins.Length + 1);
inputPins[i] = new PinPanel()
{
Location = new Point(x, y),
Size = new Size((int)(this.Width * 0.05), (int)(this.Width * 0.05)),
Anchor = AnchorStyles.Left | AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Right,
};
inputPins[i].Click += OnClickPinPanel;
}
}
else
{
x += this.Width - (int)(this.Width * 0.1);
for (int i = 0; i < outputPins.Length; i++)
{
y += (i + 1) * (this.Height / inputPins.Length+1);
outputPins[i] = new PinPanel()
{
Size = new Size((int)(this.Width * 0.1), (int)(this.Width * 0.1)),
Location = new Point(x, y),
Anchor = AnchorStyles.Left | AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Right
};
outputPins[i].Click += OnClickPinPanel;
}
}
}
我现在得到的结果是 pinpanel 得到一个固定位置,但是当你有超过 1 个 pinpanel 时,位置是错误的,就像他认为 usercontrol 更大那么它是Reality。为了查看所有引脚,我必须调整大小并得到这个After resize
我希望它看起来像这样 expectations
【问题讨论】:
-
您的代码需要移动 left 和 top 属性。当一个控件变大时,周围的控件需要移动,以免它们与变大的控件重叠,因此您需要更改 left 和 top 属性。
-
@jdweng 插板的定位怎么样?它需要有一定的尺寸才能在错误的位置看到它们
-
我特别使用“控件”这个词而不是面板,因为我指的是表单上的所有对象。
标签: c# winforms user-controls panel