所以我正在尝试制作一个漂亮的圆形开关,当点击它时它会向左或向右滑动以基本上打开或关闭某些东西(它可以用于其他事情)。我有一个矩形版本的工作有点好(我想为它做一些调整)但我遇到的问题是使用圆角矩形。我做了一些课程来帮助我自己。我有一个叫 RoundRectanglePath。使用 Create 方法,我给它一个 Rectangle(或 x、y、w、h)和角的半径,它返回一个封闭的 GraphicsPath,然后我可以使用 Graphics.[Fill|Draw]Path。然后我有一个 RoundRectangle 类,它只是一个与标签非常相似的控件。我发现如果我覆盖 OnPaintBackground 并且不将事件发送到基础,而是绘制一个与其父级颜色相同的矩形。BackColor 比我得到的控制是真的圆的错觉。(作为相关的旁注,我允许透明)
对于我的 RoundMovableSwitch 类,我使用 2 个 RoundRectanglePaths 将控件分成两半。左边是绿色,右边是粉红色(现在想起来,我可以只使用水平线性渐变画笔......哦哦哦哦)然后我在相对两侧绘制字符串 On 和 Off。在该控件中,我添加了一个 RoundRectangle。当用户单击 RoundRectangle 或 MoveableSwitch 时,控件会一次将 RoundRectangle 向左或向右移动 1 个像素。运动效果很好。我遇到的问题是这个。RoundRectangle 的外边缘是正确的透明颜色。内侧边缘颜色错误。请参见下图中的 RoundMovingSwitch 1 和 2。一旦我让代码正常工作,我将返回并重新组织代码。
代码托管在 GitHub 上:这里