我有一个自定义窗体,在其边缘上有4个面板.我想锚定另一个面板以将用户控件包含到窗体的可见边缘.完成此操作后,我便想将数量不确定的控件锚定到已经锚定的面板上.我对此很陌生,我不知道这是实现我的目标的最佳方法,该...
我有一个自定义窗体,在其边缘上有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,一个组框和一个标签.所有这些项目都设置为使用左,右锚点自动调整大小,但用户控件除外,因为我无法在属性窗口中设置该大小,但是我想我是通过上述方法进行设置的.
当前的结果是,容器面板最初是完美绘制的,但从未调整大小.问题对象的绘制大小与创建对象时的大小相同,尽管这不是最大或最小大小.
[编辑]
我遇到的问题是锚点样式在自动调整大小方面效果不佳.关闭自动调整大小并操纵了anchorStyles之后,我能够获得所需的结果.
解决方法:
首先,我不确定您要做什么,但与您尝试实现的方式相比,锚定要简单得多.
每个控件都有一个称为Anchor的属性,它是一个AnchorStyles枚举.这些值可以是Left,Right,Top,Bottom或None,并且可以按位进行“或”运算以允许多个锚定值.
默认的“锚点”值为“左上”.如果将锚点更改为“右上角”,则控件将保持相同的大小,但在调整大小后将在应用程序窗口的右侧“浮动”.如果您锚定到“左”,“上”和“右”,则在调整窗口宽度时,控件将增大和缩小.
我认为您不需要这些面板中的任何一个,除非它们用于将控件逻辑上组合在一起.您可以通过在窗体上放置一堆控件并更改其锚定设置来试验锚定.运行测试表单并调整其大小,然后看看会发生什么.
此外,如果您希望随着Window的增长和收缩而重新排列表单的内容,则标准MS工具箱将提供一些控件供您使用.具体来说,请签出FlowLayoutPanel和TableLayoutPanel.您可以使用这些控件来微调您要如何在窗体或窗体的一部分中重新放置子控件.
本文标题为:c#-Windows窗体中的自定义锚定
基础教程推荐
- C#基于Socket的网络通信类你了解吗 2023-05-26
- C#读写Config配置文件案例 2023-05-31
- 一个.NET Core开发者的Linux入门学习笔记 2023-09-28
- 如何在C#/ Windows窗体中翻转/旋转标签? 2023-09-19
- unity实现鼠标跟随(ITween) 2023-02-16
- .NetCore3.1 DESEncrypt加密解密、MD5加密 2023-09-28
- 详解WPF如何在基础控件上显示Loading等待动画 2023-07-18
- 一个读写csv文件的C#类 2022-11-06
- Unity实现简单场景分层移动 2023-04-28
- C#实现分治算法求解股票问题 2023-06-05