【发布时间】:2011-08-10 18:00:39
【问题描述】:
我有一个自定义表单,它的边缘有 4 个面板。我想将另一个面板锚定到表单的可见边缘以包含用户控件。完成后,我想将不确定数量的控件锚定到已经锚定的面板上。我对此很陌生,我不知道这是实现我的目标的最佳方法,即在调整表单大小时调整对象列表的大小。我从这个角度研究它的原因是我希望对象是可点击和可移动的,而不仅仅是文本行。
我的想法是这样的。
----------------------------------------
| Header Panel |
----------------------------------------
|| <--left panel right panel->||
|| [ user control object ]||
|| [ user control object ]||
|| [ user control object ]||
|| [ user control object ]||
----------------------------------------
| Bottom Panel |
----------------------------------------
目前我能够根据需要绘制包含用户控件对象的面板,但它不会随父级调整大小,当我尝试将其锚定到父级时,它会锚定到错误的位置。我还尝试将用户控件对象锚定到用户控制面板,但它们根本没有调整大小。
这是容器面板的代码
//This is called after InitializeComponent(), I would assume the anchor would go
//in here somewhere, but I need the anchor to be offset by the bounds of the
//other panels as listed below.
private static void SetQuestionContainerBounds(SessionReviewForm instance)
{
instance.pnlQuestionContainer.Top = instance.HeaderPanel.Bottom;
instance.pnlQuestionContainer.Left = instance.LeftPanel.Right;
instance.pnlQuestionContainer.Width = instance.RightPanel.Left - instance.pnlQuestionContainer.Left;
instance.pnlQuestionContainer.Height = instance.StatusPanel.Top - instance.pnlQuestionContainer.Top;
}
在我制作表单并定位 pnlQuestionContainer 之后,我开始制作称为基本问题对象的用户控件,锚定它们,并将它们添加到 pnlQuestionContainer
private void DisplayData()
{
// tracks the number of questions, used in placement of objects
int questionCount = 0;
// if the session question is marked for review
// generate a new question object and place it.
foreach (SessionQuestion sq in thisSessionPart.SessionQuestions)
{
if(sq.MarkForReview)
{
BaseQuestionObject bqo = new BaseQuestionObject(sq, parentSession);
BaseQuestionObject.FitAndPlaceObject(pnlQuestionContainer, bqo, questionCount);
bqo.Anchor = (AnchorStyles.Left | AnchorStyles.Right);
pnlQuestionContainer.Controls.Add(bqo);
questionCount++;
}
}
}
目前,基本问题对象由三部分组成。一个用户控件、一个组框和一个标签。所有这些项目都设置为自动调整大小,左侧锚点,右侧除了用户控件,因为我无法在属性窗口中设置它,但我想我是在上面的方法中设置它。
目前的结果是容器面板一开始就画得很完美,但是从来没有调整大小。问题对象的绘制尺寸与其制作时相同,但这不是最大或最小尺寸。
[编辑] 我遇到的问题是锚样式不能很好地使用自动调整大小。关闭自动调整大小并操作 anchorStyles 后,我能够得到想要的结果。
【问题讨论】:
-
欢迎来到 SO!请在下面查看我的回复。出于礼貌,如果您发现此答案(或任何未来的答案)有帮助,请投票赞成。同样,在一段合理的时间后,如果一个答案优于其他答案,请选择答案旁边的“检查”按钮,以奖励回答者的回答。
-
在获得 15 分之前,我无法对您的回复投赞成票:p
-
BaseQuestionObject.FitAndPlaceObject()方法对传入的BaseQuestionObject做了什么?它是否设置了位置和大小? -
确实如此,例如它告诉 BaseQuestion 的这个实例应该在哪里绘制它。我想我是通过他们的方式得到的,测试了更多的东西,我会更新我的帖子后记。