c# - 如果不满足特定时间范围,如何启用或禁用组合框中的值
问题描述
您好,我有一个程序,其中包含一系列组合框,用户可以从中选择不同的值。其中一个 cb 中包含 1、2 和 3 int 值。这些值分别对应于第一、第二和第三班次。如果系统时间从早上 6 点开始,我想禁用值 2 和 3。直到下午 2 点。然后对其他班次做同样的事情。如果系统时间是从下午 2 点到晚上 10 点,则禁用或灰显数字 1 和 3。如果系统时间从晚上 10 点开始,则禁用 CB 值 1 和 2。到早上 6 点。我目前正在使用计时器在 UI 上的标签内显示系统时间。我不知道从哪里开始。我查看了谷歌和那里的所有答案,与 WPF 或 Javascript 相关,而不是 Winforms。在 WinForms c# 中甚至可以使用此功能吗?
谢谢你。
解决方案
注意:这个答案大量借鉴了Apurba Ranjan撰写的这篇文章。
您可以做的一件“hacky”事情是为您的组合框项目创建一个自定义类,其中包含一个Enabled
属性:
class ComboBoxItem
{
public string Text { get; set; }
public bool Enabled { get; set; }
public ComboBoxItem(string text, bool enabled)
{
Text = text;
Enabled = enabled;
}
}
然后,当我们将此类的项目添加到组合框时,我们Enabled
根据当前时间设置属性(注意我们还为事件设置DisplayMember
并挂钩了事件处理程序SelectedIndexChanged
):
private void Form1_Load(object sender, EventArgs e)
{
cboShifts.DisplayMember = "Text";
cboShifts.SelectedIndexChanged += CboShifts_SelectedIndexChanged;
var currentTime = DateTime.Now;
var firstEnabled = currentTime >= DateTime.Parse("6:00 AM") &&
currentTime < DateTime.Parse("2:00 PM");
var secondEnabled = currentTime >= DateTime.Parse("2:00 PM") &&
currentTime < DateTime.Parse("10:00 PM");
var thirdEnabled = !firstEnabled && !secondEnabled;
cboShifts.Items.Add(new ComboBoxItem("1", firstEnabled));
cboShifts.Items.Add(new ComboBoxItem("2", secondEnabled));
cboShifts.Items.Add(new ComboBoxItem("3", thirdEnabled));
}
然后,在这种情况SelectedIndexChanged
下,我们可以获得选中的项目,如果它是null
(意味着选中的索引是-1
)然后我们返回,否则如果它的Enabled
属性是false
,我们将选中的索引设置为-1
(基本上不允许他们选择它):
private void CboShifts_SelectedIndexChanged(object sender, EventArgs e)
{
var item = (sender as ComboBox)?.SelectedItem as ComboBoxItem;
if (item == null) return;
// Don't let the user select a disabled item
if (!item.Enabled)
{
cboShifts.SelectedIndex = -1;
MessageBox.Show($"Item '{item.Text}' is not enabled");
return;
}
// Optionally do something here for a valid selection
}
推荐阅读
- c++ - 继承、覆盖和虚函数,避免重复代码
- javascript - 使用三个级别的自定义排序标准对对象数组进行排序
- sql - 在 SQL 中选择 MAX
- installation - gpg: 没有找到有效的 OpenPGP 数据。安装jitsi
- powerbi - Dax Measure - 计算员工行具有特定值的次数
- javascript - 一个简单的 JS 函数问题 -> 创建一个只返回偶数的函数
- r - 如何在同一标签文本中的纯文本字体和纯文本字体之间交替
- java - 子实体通过延迟获取获取
- typescript - 以编程方式调用 Organize Imports 并随后保存文件
- fullcalendar - ContextMenu 与 FullCalendar 4.0 集成