簡體   English   中英

C#復選框和鼠標單擊事件

[英]C# checkbox and mouse click event

我正在自學C#,遇到了一個我似乎也找不到答案的問題。 我有一個窗體,當我單擊鼠標復選框時,狀態變為true,但也會立即觸發鼠標單擊事件,我的代碼如下:

private void uxCheckBoxMouseClick(object sender, MouseEventArgs e)
{
    //MouseEventArgs me = (MouseEventArgs) e;
    if (uxMouseCopyCheckBox.Checked)
    {
        MessageBox.Show("Test");
        uxMouseCopyCheckBox.Checked = false;

    }
}

我已經搜索了堆棧溢出和Google,發現了類似的項目,但不是在C#中,但是在固定解決方案上沒有運氣。 我要執行的操作是使用第一次單擊將復選框更改為true,而不會觸發鼠標單擊事件。 我想將事件延遲到第二次鼠標單擊而不是第一次單擊。

我嘗試了以下方法:

  • for循環
  • 使用if語句單擊== 2
  • 訂閱但對使用的內容不知所措

只需將布爾變量用作標志即可。

private bool wasAlreadyClickedOnce;

private void uxCheckBoxMouseClick(object sender, MouseEventArgs e)
{
    if (!wasAlreadyClickedOnce)
    {
        wasAlreadyClickedOnce = true;
        return;
    }

    if (uxMouseCopyCheckBox.Checked)
    {
        MessageBox.Show("Test");
        uxMouseCopyCheckBox.Checked = false;

    }
}

除了Click事件,您還可以訂閱CheckedChanged事件:

該處理程序看起來與您的完全一樣:

private void uxMouseCopyCheckBox_CheckedChanged(object sender, EventArgs e)
{
    if (!uxMouseCopyCheckBox.Checked)
    {
        MessageBox.Show("Test");
        uxMouseCopyCheckBox.Checked = false;
    }
}

唯一的不同是,我們希望僅在第二次單擊時才顯示“消息”框,以便您取消選中該復選框。

但是請注意,如果更改復選框的默認狀態,它將不再起作用。

如果您想要一個真正健壯的解決方案,格蘭特(Grant)的解決方案是最好的恕我直言,我只是在這里向您展示如何調整代碼以使其工作

嘗試使用Click事件而不是CheckedChanged事件來選中或取消選中CheckBox ,然后可以將MouseClick事件用於其他內容。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM