嗨,我遇到了一个奇怪的bug,或者我不理解一些东西。简而言之,我已经拥有了我想要在我的表单上工作的一切,然后我决定将该表单转换为一个选项菜单,这样它就不再是应用程序启动时出现的第一个表单,而是在我单击带有代码的不同表单上的按钮后显示
private void ShowOptionsButton_Click(object sender, EventArgs e)
{
formHomePage.Show();
}由于某种原因,计时器if语句不再起作用:
private void StartSubCheckT_Tick(object sender, EventArgs e)
{
if (subliminalMessages.Count > 0)
{
MessageBox.Show("list greater than 0 if");
StartSubB.Enabled = true;
}下面还有其他if语句,但这些都是不相关的,这样做的目的是在列表大于0时使按钮可用。我已经创建了另一个显示该值的测试按钮,它显示sublminalMessages列表大于0
private void testbutton3_Click(object sender, EventArgs e)
{
MessageBox.Show(subliminalMessages.Count.ToString());
}它输出的值应该是1,而其他一些代码在开头加了一个值。但是由于某些原因,即使subliminalmessages.count大于0,if语句也不再被调用,因为我使表单看起来像是从上面的按钮代码中的另一个表单调用的。
在相同的表单上填充和创建subliminalMessages列表
public List<string> subliminalMessages = new List<string>();
private void Form1_Load(object sender, EventArgs e)
{
if (!String.IsNullOrEmpty(Settings.Default["Subliminal1"].ToString()))
{
subliminalMessages.Add(Settings.Default["Subliminal1"].ToString());
MessageBox.Show("If worked");
}
}正在添加的Setting.Default中有一个值
按钮和计时器在同一窗体上,并且有问题的计时器已启用。
有人知道为什么吗?
谢谢
发布于 2018-08-01 02:15:22
我试着给你一个答复。但这与你现在所做的有点不同。
根据我对您代码的理解,您正在使用计时器来启用/禁用StartSubB按钮。或者干脆启用它。
与其依赖于似乎不起作用的定时器,为什么不使用BindingList<string>。这有一个名为ListChanged的事件,您可以处理该事件,然后启用/禁用按钮。
下面是我创建的一个测试表单:
public partial class Form1 : Form
{
BindingList<string> items;
public Form1()
{
InitializeComponent();
button3.Enabled = false;
items = new BindingList<string>();
items.ListChanged += Items_ListChanged;
}
private void Items_ListChanged(object sender, ListChangedEventArgs e)
{
button3.Enabled = items.Count > 0;
}
private void btnAdd_Click(object sender, EventArgs e)
{
items.Add("a");
}
private void btnRemove_Click(object sender, EventArgs e)
{
if (items.Count > 0)
items.RemoveAt(items.Count - 1);
}
}我有一个名为items的BindingList<string>。这类似于您的subliminalmessages列表,但它是一个BindingList。这种类型的列表有一个ListChanged事件,在向列表添加项或从列表中删除项时会触发该事件。在构造函数中,我们新建了items列表并订阅了ListChanged事件。
当Items_ListChanged事件激发时,button3是启用还是禁用取决于items.Count > 0是否启用。
在btnAdd_Click中,我们只需向列表中添加一项。在btnRemove_Click中,我们检查有一些项目,然后删除最后一个。
如果您要运行此程序,您将看到,当我们单击Add按钮时,button3将被启用。如果我们单击Remove按钮,我们将看到button3被禁用。
BindingList的唯一限制是不能通过传入另一个列表来添加范围。
如果你实现了这一点,但你的按钮仍然没有激活,那么你可能需要发布更多的代码。剔除所有不相关的内容,并将其放入一个演示条件失败的新项目中,然后将代码复制到此处或提供下载该项目的链接。if语句失败的唯一原因是列表实际上是空的。
https://stackoverflow.com/questions/51618872
复制相似问题