gpt4 book ai didi

c# - Windows 窗体中的自定义锚定

转载 作者:行者123 更新时间:2023-11-30 15:43:07 25 4
gpt4 key购买 nike

我有一个自定义表单,其边缘有 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++;
}
}
}

目前,一个基本问题对象由三部分组成。一个 userControl、一个组框和一个标签。所有这些项目都设置为使用左侧 anchor 自动调整大小,右侧的 anchor 除外,因为我无法在属性窗口中设置它,但我想我是在上面的方法中设置它的。

目前的结果是,容器面板一开始是完美绘制的,但它永远不会调整大小。问题对象的绘制尺寸与它们制作时的尺寸相同,但这不是最大或最小尺寸。


[编辑]我遇到的问题是 anchor 样式在自动调整大小方面效果不佳。关闭自动调整大小并操纵 anchorStyles 后,我能够获得所需的结果。

最佳答案

首先,我不是 100% 确定您要尝试做什么,但锚定比您尝试实现它的方式简单得多。

每个控件都有一个名为 Anchor 的属性,它是一个 AnchorStyles枚举。这些值可以是 Left、Right、Top、Bottom 或 None,并且可以按位或运算在一起以允许多个锚定值。

默认的“ anchor ”值为左上角。如果将 anchor 更改为右上角,您的控件将保持相同大小,但在调整大小时将“ float ”在应用程序窗口的右侧。如果您锚定到左侧、顶部和右侧,您的控件将随着您调整窗口宽度的大小而增大和缩小。

我认为您不需要这些面板中的任何一个,除非它们用于在逻辑上将控件组合在一起。您可以通过在窗体上放置一组控件并更改它们的 anchor 设置来试验 anchor 。运行您的测试表单并调整它的大小,看看会发生什么。

此外,如果您想在窗口增大和缩小时重新排列窗体的内容,标准的 MS 工具箱有一些控件可供您使用。具体来说,查看 FlowLayoutPanelTableLayoutPanel .您可以使用这些控件来微调您希望如何在窗体或窗体的一部分中重新定位子控件。

关于c# - Windows 窗体中的自定义锚定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7015534/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com