簡體   English   中英

.Net(Windows 窗體)用戶控件的單擊事件

[英]Click event for .Net (Windows Forms) user control

這可能是一個非常簡單的問題,但由於某種原因,即使是正確的方法來 web 搜索答案也讓我望而卻步......

我正在嘗試創建一個包含一些標簽和進度條的用戶控件。 但是,我希望整個控件都有一個“單擊”事件,無論單擊控件內的哪個項目,都會引發該事件。 我創建了一個分配給每個控件的“HandleClick”過程:

    private void HandleClick(object sender, EventArgs e)
    {
        // Call the callback function, if we were asked to
        if (OnClick != null)
        {
            EventArgs ee = new EventArgs();
            OnClick(this, ee);
        }
        else
        {
            MessageBox.Show("OnClick was null!");
        }
    }

在這種情況下,OnClick 是在控制級別定義的變量:

    public new event EventHandler OnClick;

現在,這只適用於表單。 在一個 label 上,它顯示 MessageBox,然后在封閉表單上調用事件。 所有 rest 都顯示消息框。

我覺得這應該是顯而易見的,但是一個下午的挫敗感讓我覺得我錯過了一些不言而喻的東西,但是當我看到它時,我會覺得自己像個徹頭徹尾的小丑……誰能停止對我的愚蠢傻笑足夠長的時間來啟發我哪里出錯了?

對此感到抱歉 - 只是在有人用谷歌搜索它時給出答案......

如果您有興趣,這篇文章幫助解決了這個問題:用戶控制點擊 - Windows Forms ... 基本上,刪除 HandleClick 和屬性並替換這個屬性:

public new event EventHandler Click
{
    add
    {
        base.Click += value;
        foreach (Control control in Controls)
        {
            control.Click += value;
        }
    }
    remove
    {
        base.Click -= value;
        foreach (Control control in Controls)
        { 
            control.Click -= value;
        }
    }
}

我從來沒有用 Windows Forms 嘗試過這個,但在其他 GUI 中,我放置了一個透明面板,覆蓋整個表單,這樣當您單擊“在表單上”時,事件實際上會轉到面板控件。

暫無
暫無

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

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