C# 将两个文本框配对,使其中一个文本框的数值必须小于或等于另一个文本框

C# 将两个文本框配对,使其中一个文本框的数值必须小于或等于另一个文本框,c#,winforms,C#,Winforms,为了扩展标题,我必须创建成对的文本框,这些文本框一起指定一个数字范围(例如,5到10,或者-17到-17)。这些文本框必须确保指定下限的文本框的数值必须小于指定上限的文本框的数值。一个显而易见的解决方案浮现在脑海中:父窗体中的特殊代码通过检查更新事件的值来处理更新事件。虽然这项工作完成了,但我觉得它非常不雅观和讨厌 我怀疑这个问题一定有一个可靠的面向对象的解决方案,但我不确定那会是什么。我应该怎么做呢?这里有一个想法-创建一个名为“TextBoxManager”的类: 然后,在表单OnLoad事

为了扩展标题,我必须创建成对的文本框,这些文本框一起指定一个数字范围(例如,5到10,或者-17到-17)。这些文本框必须确保指定下限的文本框的数值必须小于指定上限的文本框的数值。一个显而易见的解决方案浮现在脑海中:父窗体中的特殊代码通过检查更新事件的值来处理更新事件。虽然这项工作完成了,但我觉得它非常不雅观和讨厌


我怀疑这个问题一定有一个可靠的面向对象的解决方案,但我不确定那会是什么。我应该怎么做呢?

这里有一个想法-创建一个名为“TextBoxManager”的类:

然后,在表单OnLoad事件中,只需注册要管理的一对文本框:

higherLowerManager.RegisterTextBoxes(lowerEntryTextBox, higherEntryTextBox);
正如您所看到的,这个类将把这两者配对,并将它们订阅到一个公共事件中,在这个事件中,我们可以计算出哪个是哪个,并执行适当的逻辑


另一种方法是使用UserControl——这在动态布局方面失去了灵活性,但却巧妙地封装了整个交互。另外,从UI的角度来看,如果控件相互影响,那么它们应该紧密结合在一起。

为什么不将这两个控件放在一个UserControl中?这个控件然后封装了您想要的功能。他们甚至都可以在UserControl中订阅相同的更改事件,您只需检查发送者就可以确定哪个框是哪个,我甚至没有想到这一点。这比直接将其放入父窗体要干净得多。你应该把它作为答案提交。谢谢嗯。作为一个缺点,这确实使两个文本框的位置变得僵硬(除非我为每个排列创建一个新的UserControl)。虽然这适用于我对它的特定使用,但我仍然对文本框本身中提供此功能的机制感兴趣(如果需要,可以扩展)。您可以将此作为用户控件的一项功能-当您创建控件时,它可以有一个设置,根据您的喜好排列控件。例如,您可以创建一个具有两列或两行的表格布局面板,以包含文本框,具体取决于您想要的是“水平”还是“垂直”。我唯一能想到的另一种方法是使用一个扩展方法或助手类,让您注册一对控件,并将其连接到一个更改事件。当其中一个控件发生更改时,helper类将搜索另一个控件,等等。正是我要找的+1并接受。
TextBoxManager higherLowerManager = new TextBoxManager();
higherLowerManager.RegisterTextBoxes(lowerEntryTextBox, higherEntryTextBox);