需要帮助防止无限循环。属性设置

2023-12-05

所以我有一个颜色选择器。用户可以使用 RGB 或 HSB 选择颜色。每个值都有滑块/属性。例如,当用户设置红色时,我将计算 HSB 值以反映新的颜色值。当用户设置 Hue 时,RGB 值将从 HSB 值重新计算。但请注意那里有一个循环。当我设置 RGB 时,它必须重新计算 HSB 值,到目前为止还可以,但这也意味着 HSB 值将发生变化,导致 RGB 值再次重新更新。我认为这就是问题所在,但我该如何解决这个问题?

更新:一种可能的解决方案

我使用的一种可能的解决方案是 flag,虽然可读性不太好,但它有效。基本上,当我设置属性时,我还设置了一个标志来表示我正在设置一个值

public float Hue {
    get { return _hue; }
    set
    {
        if (_hue == value)
            return;
        CurrentlySetting = (CurrentlySetting.HasValue) ? CurrentlySetting : ColorType.HSB;
        _hue = value;
        NotifyPropertyChanged("Hue");
        NotifyPropertyChanged("Color");
        RecalculateRGB();
        CurrentlySetting = (CurrentlySetting == ColorType.HSB) ? null : CurrentlySetting;
    }
}

当我“重新计算”值时,我会检查并确保我当前没有设置它们

protected void RecalculateRGB(Color color = new Color())
{
    if (CurrentlySetting == ColorType.RGB) // prevent stackoverflow
        return;

    if (color == new Color())
        color = HSBColorHelper.FromAHSB(255, Hue, Saturation, Brightness);
    Red = color.R;
    Green = color.G;
    Blue = color.B;
}

不是很直接,我仍然更喜欢@Marc Gravell 的解决方案


我会让所有设置器调用相同的内部代码:

public byte R {
    get {return r;}
    set { SetRGB(value, G, B); }
}
public byte G {
    get {return g;}
    set { SetRGB(R, value, B); }
}

等等 - 以及内在SetRGB方法仅与字段(而不是属性)对话,包括您需要的任何 HSB 字段;所以没有递归。您可能还想要一个SetHSB,显然 - 再次设置all字段(不调用任何属性设置器)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

需要帮助防止无限循环。属性设置 的相关文章

  • 删除是如何工作的? [复制]

    这个问题在这里已经有答案了 可能的重复 C 编程 free 如何知道要释放多少 https stackoverflow com questions 1518711 c programming how does free know how m
  • 如何在 XAML/WPF 中存储和检索多个形状?

    使用 XAML WPF 做一些简单的事情似乎遇到了很多问题 我已经使用矩形和椭圆形等形状创建了一些基于 XAML 的图像来创建我需要应用程序的其他部分使用的图标 但我不能似乎找到了如何做到这一点 我似乎能够在资源字典中存储画布 但无法在任何
  • CSharpRepl emacs 集成?

    我碰巧知道莫诺CSharpRepl http www mono project com CsharpRepl 是否有 emacs csharp 模式使用它在一个窗口中运行 REPL 并像 python 模式一样在另一个窗口中编译 运行 C
  • std::call_once 可重入且线程安全吗?

    std call once http en cppreference com w cpp thread call once是线程安全的 但它也是可重入的吗 我使用 VS2012 调试和发布 进行的测试表明 调用std call once从单
  • 如何使用 SOAP 且不使用 WSE 在 .NET 中签署 Amazon Web 服务请求

    亚马逊产品广告 API 以前称为 Amazon Associates Web Service 或 Amazon AWS 实施了一项新规则 即自 2009 年 8 月 15 日起 向其发送的所有 Web 服务请求都必须经过签名 他们在其网站上
  • Gwan C#,如何获取HTTP标头?

    我需要它来重写 url 以了解我正在处理哪个友好的 url 用于用户代理和其他东西 EDIT public class Gwan MethodImplAttribute MethodImplOptions InternalCall exte
  • 计算另一个表达式中的 C# 表达式

    我想在另一个表达式中使用一个表达式 Expression
  • 一元 +/- 运算符如何可能导致“-a”或“+a”中的整数提升,“a”是算术数据类型常量/变量?

    这句看似微不足道的台词摘自我的迈克 巴纳汉和布雷迪的 C 书 第 2 8 8 2 节 http publications gbdirect co uk c book chapter2 expressions and arithmetic h
  • C# 编译器不会优化不必要的强制转换

    前几天 在写答案的时候这个问题 https stackoverflow com questions 2208315 why is any slower than contains在这里 关于溢出 我对 C 编译器感到有点惊讶 它没有按照我的
  • 使用 C# 和 wpf 创建类似 Dock 的应用程序

    我需要创建一个与我们购买笔记本电脑时获得的应用程序类似的应用程序 仅当鼠标指针到达窗口顶部时它才可见 那么我怎样才能使用 C 4 0 来做到这一点呢 http www notebookcheck net uploads pics win2
  • CSS以两种颜色显示一个字符[重复]

    这个问题在这里已经有答案了 css中是否可以用两种颜色制作单个字符 我的意思是例如字符 B 上半部分为红色 下半部分为蓝色 h1 font size 72px background webkit linear gradient red 49
  • Project Euler #8,我不明白我哪里出了问题[关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 我正在做项目欧拉第八题 https projecteuler net problem 8 其中我得到了这个大得离谱的数字 7316
  • 英文日期差异

    接近重复 如何计算相对时间 https stackoverflow com questions 11 how do i calculate relative time 如何在 C 中计算某人的年龄 https stackoverflow c
  • ASP.NET MVC 路由:如何从 URL 中省略“索引”

    我有一个名为 StuffController 的控制器 具有无参数索引操作 我希望从表单中的 URL 调用此操作mysite com stuff 我的控制器定义为 public class StuffController BaseContr
  • 选择查询不适用于使用Parameters.AddWithValue 的参数

    C 中的以下查询不起作用 但我看不出问题所在 string Getquery select from user tbl where emp id emp id and birthdate birthdate cmdR Parameters
  • 如何停止无限循环?

    我正在编写一个程序 该程序将计算三角形或正方形的面积 然后提示用户是否希望计算另一个 我的代码已经运行到可以计算任一形状的面积的程度 但随后不再继续执行代码的其余部分 例如 如果选择了正方形 则计算面积 然后返回到正方形边长的提示 我假设这
  • 在 C#.NET 中安全删除文件

    在我正在做的一个项目中 我想为用户提供 安全 删除文件的选项 例如 用随机位或 0 覆盖它 在 C NET 中是否有一种简单的方法可以做到这一点 效果如何 你可以调用系统内部删除 http technet microsoft com en
  • 如何得知客户端从服务器的下载速度?

    根据客户的下载速度 我想以低质量或高质量显示视频 任何 Javascript 或 C 解决方案都是可以接受的 Thanks 没有任何办法可以确定 您只能测量向客户端发送数据的速度 如果没有来自客户端的任何类型的输入来表明其获取信息的速度 您
  • 颜色渐变算法

    给定两种 RGB 颜色和一个矩形 我可以创建一个基本的线性渐变 这博客文章 https bsou io posts color gradients with python关于如何创建它给出了很好的解释 但我想在这个算法中添加一个变量 角度
  • 如何使用placement new重新初始化该字段?

    我的课程包含字段 private OrderUpdate curOrderUpdate 我一遍又一遍地使用它 经常需要重新初始化 for int i 0 i lt entries size i auto entry entries i ne

随机推荐

  • 如何更改 Django 管理中的foreignkey显示文本?

    如何更改显示文本
  • Symfony 2 实体存储库 find() 返回空数组

    从现在开始谢谢大家的回答 这就是问题所在 我有一个 symfony 2 应用程序 有两个实体 任务和产品 当我尝试查找 findBy findOneBy findAll 产品时 它返回一个空数组 任务实体
  • 如何在 mongodb 中表示线程评论(以及评论投票)的数据?

    对于我的博客 我想合并我自己的评论系统 而不依赖于默认的 WordPress 评论系统 我需要使用评论模块mongodb代替mysql该模块需要以下支持 线索评论 评论投票 需要对整个博客的每个评论作者汇总评论投票 在这种情况下 在 mon
  • 带 unique_ptr 的受保护析构函数

    我正在尝试从第三方库调用 API 当我想将 unique ptr 与具有受保护析构函数的类一起使用时 会出现问题 这是例子 include
  • MySQL 安装:错误:无法构建 gem 本机扩展

    我正在尝试将 MySQL 安装到最新版本 因为某些安装过程中出现了错误 我运行命令gem install mysql我收到以下信息 构建本机扩展 这 可能需要一段时间 错误 错误 安装 mysql 错误 失败 构建 gem 本机扩展 Sys
  • R 中用于文本分类的 SVM

    我正在使用支持向量机对我的文本进行分类 但实际上我并没有得到结果 而是得到了数值概率 数据框 1 20 训练集 21 50 测试集 Updated ou lt structure list text structure c 1L 6L 1L
  • 功能区 GUI 指南

    我正在考虑在我的一个应用程序中实现功能区 GUI 当然希望遵守 MS 指南 因此它感觉就像普通的功能区等 但我正在尝试找出如何解决动态更改中的特定问题丝带 我正在创建一个概念游戏编辑器 请不要问为什么要使用功能区 因为这纯粹是一个概念想法
  • 有没有一种简单的方法从数组中删除重复元素?

    我想从数组中删除重复的元素 use itertools Itertools use std collections HashSet derive Debug struct Person name String age u32 fn main
  • 0-1多维背包

    因此 我正在尝试生成一种算法 该算法将找到 n 个物品 在我的情况下为 4 个 的最佳组合 这些物品只能在最大重量容量下放入背包一次 0 1 概括起来可能更有效 我想在我的背包中放置不超过四个独特的物品 以便它们的重量小于某个值 W 同时最
  • 如何在 facebook-api 中标记照片?

    我想问是否 如何可以使用 FB API 图形或 REST 来标记照片 我已经成功创建了一个相册并在其中上传了一张照片 但我仍然坚持标记 我已获得权限和正确的会话密钥 到目前为止我的代码 try uid facebook gt getUser
  • Rails 中的“新建”操作如何重定向到“创建”?

    在 Rails 中 我可以使用以下命令自动创建一组用于 CRUD 操作的路由resources在路线文件中 这创造了index new create edit show update并破坏路线 我了解这些路由如何工作的一般流程 通常当调用路
  • Java 如何将音频数据存储在字节数组中。

    谁能告诉我如何将音频文件 au 中的音频数据读取存储到字节数组中 我查看了 Oracle 上的 Java 文档 但我不知道如何使用这些信息来编写程序 我猜测 音频数据 您需要 AU 文件中的音频样本 不包括标头信息和元数据 如果您只想将文件
  • 获取跨域iframe的DOM内容[重复]

    这个问题在这里已经有答案了 我有一个用于跨域网站的 iframe 我想读取 iframe 的 DOM 我相信这是可能的 因为使用检查器 我什至可以修改 iframe 的 DOM 然而 我尝试以各种方式阅读它 都会遇到相同的来源政策 我想要的
  • Azure Devops 管道,用于使用 iPhone 应用程序和 watchos 应用程序构建 ios 捆绑包

    我想使用 Azure Devops 管道来构建 ios 捆绑包 其中包含 iphone 应用程序和 watchos 应用程序 有一个工作区包含 3 个应用程序 一个用于手机 两个用于手表 我的工作区 我的手机应用程序 我的手表应用程序 My
  • 我的组合框不显示我在 VBA 中添加的值

    我正在尝试向用户窗体中的组合框添加选项 当我运行代码时 Excel 不会给出任何错误 但是当用户窗体显示时 它不会显示我之前添加到组合框中的实体 也就是说 当我单击组合框时 它不显示任何选项 只显示一个空白行 就好像没有添加任何项目一样 这
  • 我怎样才能摆脱角度的 $parent

    Here s Plunker 我在带有 ng include 的控制器中有一个外部模板 它根据按钮的单击事件显示和隐藏 它按要求工作 但在 ng include 模板中使用 parent 还有其他更好的方法吗 Html div div di
  • 如何从 C++ 生成均匀分布在 0 和 1 之间的随机双精度数?

    如何从 C 生成均匀分布在 0 和 1 之间的随机双精度数 当然我可以想到一些答案 但我想知道标准做法是什么 良好的标准合规性 随机性好 速度好 对于我的应用程序来说 速度比随机性更重要 多谢 PS 如果重要的话 我的目标平台是 Linux
  • Node.js:从不同域加载页面的 html

    我想知道如何加载托管在不同域上的 HTML 我正在使用 JavaScript 并且想要创建一个书签 以便我能够解析外部 HTML 我已经在谷歌上搜索了几个小时 但毫无结果 JavaScript 不允许发出跨域请求 这是一个很大的安全风险 相
  • 不计算列中重复值的值的累积和

    我在 R 中有这样的数据 x lt c 1 2 2 3 4 4 7 8 y lt c 300 200 200 150 100 100 30 20 df lt data frame x y 数据集的累积为 cum df lt data fra
  • 需要帮助防止无限循环。属性设置

    所以我有一个颜色选择器 用户可以使用 RGB 或 HSB 选择颜色 每个值都有滑块 属性 例如 当用户设置红色时 我将计算 HSB 值以反映新的颜色值 当用户设置 Hue 时 RGB 值将从 HSB 值重新计算 但请注意那里有一个循环 当我