【发布时间】:2023-04-01 01:48:02
【问题描述】:
我目前正在开发一个编辑器,它可以让用户设计自己的 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(){}... 似乎不是一个好主意:)
我愿意接受任何想法/解决方案。 提前致谢!
【问题讨论】:
-
您应该为每个复选框处理
Checked事件,然后您可以使用SelectedControl.Anchor &= ~AnchorStyles.Top;将其删除,例如在清除该框时,或在选中框的情况下添加它。 -
由于你使用的是 CheckBox,你可以设置
SelectedControl.Anchor ^= AnchorStyles.Top等(当然以AnchorStyles.None开头) -
一个建议,如果您需要在应用程序重新启动时恢复布局:使用类对象来存储定义其布局的控件的属性,这样您就可以轻松地序列化这些列表对象并反序列化它以复制布局,将原始属性重新应用于相应的控件(因此,也存储类型)。
-
一般来说,我更喜欢显示属性的子集并使用
PropertyGrid来编辑属性。 You can easily achieve it using a custom class containing desired properties which acts as a wrapper around the selected control and each property gets or sets the corresponding property in the selected control.您还可以使用custom type descriptor 并使某些属性可浏览。 -
查看 Reza Aghaei 发布的内容。对所有 CheckBox 控件使用相同的事件处理程序:该方法简化了所有逻辑。