【问题标题】:Disable a winform button based on selected in list box根据列表框中的选择禁用winform按钮
【发布时间】:2019-08-09 02:52:51
【问题描述】:

虽然我确信答案很简单,但我还没有找到一种搜索友好的方式来问这个问题。如果列表框中没有选择任何内容(索引为-1),我想禁用一个按钮。除非您更改表单上的其他内容,否则使用 IndexChanged 事件有点工作。索引更改为 -1,但事件不会触发。当表单上的任何内容发生更改时是否会触发事件,然后我可以检查我的状态?

抱歉太简短了……我是用手机发帖的。

这是我认为应该起作用的方法。

private void SourceFolderListBox_SelectedIndexChanged(object sender, EventArgs e)
    {
        SetDeleteFolderButtonStatus();
    }

private void SetDeleteFolderButtonStatus()
    {
        if (SourceFolderListBox.SelectedIndex == -1)
            DeleteFromSourceButton.Enabled = false;
        else DeleteFromSourceButton.Enabled = true;
    }

private void SourceFolderListBox_Leave(object sender, EventArgs e)
    {
        SetDeleteFolderButtonStatus();
    }

所以错误是如果我在表单上编辑不同的字段,SourceFolderListBox 中的选择会清除(索引更改为 -1)但按钮保持启用状态。

我的解决方法是每次更改时都致电SetDeleteFolderButtonStatus()。这对我来说感觉很草率,但我相对较新。

【问题讨论】:

  • 也许还订阅LeaveLostFocus 事件以检测“您更改了表单上的其他内容”的时间?
  • 除非您更改表单上的其他内容。索引变为-1 → 可以分享一下minimal reproducible example吗?
  • 您好,如果您能分享一下已经完成的工作,那就太好了
  • @Sweeper 我没有看到LostFocus 的活动,会不会和Leave 一样?
  • @RezaAghaei 感谢您的建议。我想我更好地理解你需要什么。我会写一个独立的程序,除了这个什么都不做,看看我得到了什么。

标签: c# winforms


【解决方案1】:

我认为这里有两种解决方案:

1) 点击按钮并选择属性 -> 搜索选项 [已启用] -> 从 true 更改为 false。

2) 或者直接写代码:button.Enabled = false;

【讨论】:

  • 对不起,我第一次没有包含代码。我现在已经编辑了我的问题,你会看到这就是我用来控制按钮的方法。
【解决方案2】:

我发现是我弄糊涂了。我还没有弄清楚绑定,所以我编写了自己的方法来刷新每个数据点上的数据。每次字段更改时我都会调用此方法,这会重置问题 ListBox 中的索引。

感谢@RezaAghaei 帮助我学会纠正自己的错误。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-30
    • 2019-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-13
    相关资源
    最近更新 更多