【问题标题】:Winforms C# Disable/ Enable Button on Treenode ClickWinforms C#禁用/启用Treenode上的按钮单击
【发布时间】:2017-05-31 19:34:53
【问题描述】:

我有一个树节点,它显示来自 SQL 数据库的清单。我有一种方法可以获取选定的工作流。

如果选中了一个复选框,我想启用运行按钮,如果没有选中任何内容并在加载时禁用该按钮。

我不确定该 if 语句应该放在哪里。我尝试将它放在单击操作的运行按钮下,但它无法正常工作。

感谢任何帮助。

List<WorkflowViewModel> workflowViewList = new List<WorkflowViewModel();

var workflowList = GetSelectedWrokflows();
if (workflowList.Count == 0)
{

    button.enabled = false;
}
else
{
    button.enabled = true;
}

【问题讨论】:

  • 我不确定,但可能将 if 语句放在第 20 行就可以了。如果没有看到您的代码,我无法更准确地说出
  • @SergeyBerezovskiy 它应该在第 5 行,课外。和命名空间之后。
  • 您应该编写AfterCheck 事件,进行所有测试,然后设置按钮状态。
  • 为什么用sql标记这个问题?
  • 我不确定该 if 语句应该放在哪里 到函数中。你应该在哪里调用这个函数?在 AfterCheck 事件中。

标签: c# sql winforms button


【解决方案1】:

执行此操作的一种方法是创建一个方法,该方法将执行确定所选工作流项目并启用或禁用按钮的工作。通过将代码放在一个方法中,它允许您从多个位置调用它,如果您需要更改行为,您只有一个地方可以进行修改。

然后你可以从Form_Load事件和选中列表框的ItemCheck事件调用这个方法:

public partial class Form1 : Form
{
    List<WorkflowViewModel> workflowViewList = new List<WorkflowViewModel>();

    private void SetRunButtonState()
    {
        workflowViewList = GetSelectedWorkflows();
        button.Enabled = workflowViewList.Count > 0;
    }

    private void Form1_Load(object sender, EventArgs e)
    {
        SetRunButtonState();
    }

    private void treeView1_AfterCheck(object sender, TreeViewEventArgs e)
    {
        SetRunButtonState();
    }

    // Rest of class code omitted...
}

【讨论】:

  • 您好,感谢您的帮助。我添加了这段代码,但现在即使选中了复选框,按钮仍然处于禁用状态。你知道为什么吗?
  • 糟糕,我在问题中阅读了“显示检查列表”并使用了错误的控件。我已将代码切换为使用TreeView。是您使用的控件吗?
  • 我进行了更改,但仍然无法正常工作。即使选中该框,该按钮仍保持禁用状态
  • treeView1_AfterCheck 事件处理程序中对SetRunButtonState 的调用设置断点,然后使用F11 单步执行代码。 GetSelectedWorkflows 方法很可能存在问题,它没有用任何东西填充workflowViewList...
  • 正在填充列表。我切换到 if 语句并对其进行调试,发现它正在跳过 if 语句中的 else ..为什么会发生这种情况?
猜你喜欢
  • 2017-01-03
  • 2023-03-21
  • 1970-01-01
  • 2017-07-12
  • 1970-01-01
  • 2016-03-20
  • 1970-01-01
  • 1970-01-01
  • 2021-03-18
相关资源
最近更新 更多