【问题标题】:Winform: How to know if CheckBox has been checked from code or UI [duplicate]Winform:如何知道是否已从代码或 UI 中检查过 CheckBox [重复]
【发布时间】:2020-09-28 20:58:56
【问题描述】:

我正在开发一个 winform c# 应用程序。在这个应用程序中,我使用的是 Checkbox(准确地说是 JCS.ToggleSwitch)。

我添加了一个CheckedChanged 事件来在复选框被选中时执行一些代码。

我希望能够在不触发此CheckedChanged 事件中的代码的情况下更改代码中复选框的状态。为了做到这一点,我想知道是否有可能知道复选框状态是否由于代码或用户单击复选框而发生更改。

我尝试使用发件人DummyCheckbox_CheckedChanged(object sender, EventArgs e) 检测到这一点,但是,当状态从一段代码或 UI 更改时,发件人是相同的。

您知道是否可以仅在用户更新复选框时执行我的代码?

 private JCS.ToggleSwitch DummyCheckbox;
 this.DummyCheckbox= new JCS.ToggleSwitch();
 this.DummyCheckbox.CheckedChanged += new JCS.ToggleSwitch.CheckedChangedDelegate(this.DummyCheckbox_CheckedChanged);

 private void DummyCheckbox_CheckedChanged(object sender, EventArgs e)
 {
      if(???) //CheckState has been changed from UI
      {
           if(DummyCheckbox.Checked)
           {
               //Code 1
           }
           else
           {
               //Code 2
           }
      }
      else //CheckState has been changed because of code "DummyCheckbox.Checked = true"
      {
           //Code 3
      }
 }

【问题讨论】:

标签: c# winforms checkbox


【解决方案1】:

不,这在您的想法中是不可能的。 这是因为更改状态会导致 UI 元素触发事件。

您可以做的是在更改状态之前删除偶数处理程序,更改它并再次添加事件处理程序。因此:

this.DummyCheckbox.CheckedChanged -= new JCS.ToggleSwitch.CheckedChangedDelegate(this.DummyCheckbox_CheckedChanged);
this.DummyCheckbox.Checked = true; //Or false if needed
this.DummyCheckbox.CheckedChanged += new JCS.ToggleSwitch.CheckedChangedDelegate(this.DummyCheckbox_CheckedChanged);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-17
    • 2018-03-12
    • 1970-01-01
    相关资源
    最近更新 更多