如果满足条件的语句,则Winform Timer无法运行

时间:2018-07-31 17:20:47

标签: winforms

嗨,我遇到了一个奇怪的错误,或者我听不懂。 长话短说,我已经可以在表单上正常工作,然后决定将表单转换为选项菜单,因此它不再是启动应用程序时出现的第一个表单,单击带有代码的其他表单上的按钮后,显示

  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中有一个要添加的值

按钮和计时器具有相同的格式,并且相关计时器已启用。

有人知道为什么吗?

谢谢

1 个答案:

答案 0 :(得分:0)

我将竭尽全力为您提供答案。但这与您现在正在做的事情有些偏离。

据我对您代码的了解,您正在使用计时器来启用/禁用StartSubB按钮。或者也许只是启用它。

为什么不使用Guess Settings From Buffer而不是依靠似乎不起作用的计时器。这有一个名为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); } } 的{​​{1}}。这与您的BindingList<string>列表类似,但它是items。此类列表具有subliminalmessages事件,该事件在添加或删除列表时触发。在构造函数中,我们新建了BindingList列表并订阅了ListChanged事件。

根据items是否启用ListChanged事件引发Items_ListChanged时,

button3中,我们仅将一个项目添加到列表中。 在items.Count > 0中,我们检查是否有某些项目,然后删除最后一项。

如果要运行此命令,您会看到当我们单击“添加”按钮时,btnAdd_Click被启用。如果单击“删除”按钮,则会看到btnRemove_Click被禁用。

button3的唯一限制是您不能通过传入另一个列表来添加范围。

如果实现了此功能,但按钮仍未激活,则可能需要发布更多代码。剥离所有不相关的内容,然后将其放入一个新的项目中,该项目将演示情况的失败,然后在此处复制代码或提供下载项目的链接。 if语句失败的唯一原因是列表实际上为空。