首页 > 解决方案 > WinForms:动态添加/删除AnchorStyles到/控制

问题描述

我目前正在开发一个编辑器,它可以让用户设计自己的 WinForm 覆盖,至少在某个点上。因此,我希望用户决定当前选定的 Control 应该具有哪些 AnchorStyles。我希望它由复选框处理。这是我的想法:

在此处输入图像描述

如您所见,用户当前选择了一个动态添加的面板,称为 Grid。由右侧的 CheckBoxes 处理,他现在应该能够设置选定的 Controls AnchorStyles。这是我的问题:我似乎找不到可用的解决方案,将特定的 AnchorStyle 动态添加到现有的 AnchorStyle 中,或者相反,删除 AnchorStyle,但保留其他 AnchorStyle。

我试图让它与...一起工作

SelectedControl.Anchor += AnchorStyles.Top;

这根本不起作用。所以我想到了这个...

SelectedControl.Anchor = SelectedControl.Anchor | AnchorStyles.Top

我想它可以工作,但我什至没有测试过,因为我不知道如何删除那些未选中的 AnchorStyle。建造一个巨大的if(){} else if(){}...似乎不是一个好主意:)

我愿意接受任何想法/解决方案。提前致谢!

标签: c#winforms

解决方案


top假设您有四个名为、和的复选框控件bottom,您可以使用单一方法处理它们的事件,并根据控件的选中值设置所需控件的锚点。例如:leftrightCheckedChange

private void checkBox_CheckedChanged(object sender, EventArgs e)
{
    var values = new[] { top.Checked, bottom.Checked, left.Checked, right.Checked };
    byte[] data = new byte[1];
    new BitArray(values).CopyTo(data, 0);

    selectedControl.Anchor = (AnchorStyles)data[0];
}

注意: AnchorStyles是一个标志枚举,top=1、bottom=2、left=4 和 right=8。使用上面的代码,我混合了这些标志来创建AnchorStyles并分配给Anchor控件的属性。


推荐阅读