簡體   English   中英

(Winform)在觸發MouseHover事件后將其添加后,無法單擊鏈接標簽

[英](Winform) Cannot click the linklabel after adding it as MouseHover event fired

我有一個PictureBox。 當鼠標懸停在特定位置時,我想自動在其上添加LinkLabel。 一切都很好,但我無法單擊LinkLabel,因為它無法停止閃爍。 這是我的代碼:

private void ptbType1_MouseHover(object sender, EventArgs e)
    {            
        PictureBox ptb = sender as PictureBox;
        LinkLabel lkl = new LinkLabel();
        lkl.Text = "Change Image...";
        lkl.Font = new Font(lkl.Font.FontFamily, 10, FontStyle.Regular);
        lkl.BackColor = SystemColors.Window;
        lkl.AutoSize = false; lkl.TextAlign = ContentAlignment.MiddleCenter;
        lkl.Size = new Size(120, 30); lkl.BorderStyle = BorderStyle.FixedSingle;
        lkl.Location = new Point(ptb.Size.Width - 120, 5);
        ptb.Controls.Add(lkl);            
    }

** UPDATE 10/18/2016:使用Tooltip避免gzaxx的LOTS OF linklabel的想法建議我實現另一種方法:圖片框上已經有一個linklabel,其Visible屬性設置為False。 當鼠標懸停在圖片框上時,標簽顯示為“可見-> true”,反之亦然。 所有內容均保持不變:閃爍使得無法單擊它。 原因是圖片框上的MouseHover事件。

有任何想法嗎? 謝謝你的幫助!

您的代碼有一些問題。 首先,創建很多標簽,每次鼠標移動毫米時,都會創建一個新標簽。 其次,您不將事件附加到鏈接標簽,因此單擊它不會執行任何操作。 我的建議是,將鼠標懸停在PictureBox並顯示信息“單擊以更改圖像...”並處理單擊事件時,使用Tooltip顯示消息。

// should be called only once
private void AttachClickEvent(PictureBox ptb)
{
    ptb.MouseClick += (s, o) =>
    {
        // open change dialog here
    }
}

這是一個簡單的解決方案。

感謝您的支持,我已經解決了問題。 關鍵是

  1. 當鼠標光標進入linklabel時,它會同時觸發picturebox的MouseLeave_Event => linklabel消失

  2. 標簽消失后,鼠標光標進入圖片框,因此圖片框的MouseHover_Event => linklabel出現

--->永恆循環->閃爍

我已經通過以下代碼處理了它,以檢查鼠標光標是否在linklabel的綁定區域中,linklabel靜止不動,並且僅在光標實際離開圖片框時才會消失:

    private void ptbType1_MouseLeave(object sender, EventArgs e)
    {
        PictureBox ptb = sender as PictureBox;
        LinkLabel lkl = ptb.Controls[0] as LinkLabel;
        if (!lkl.Bounds.Contains(ptb.PointToClient(Cursor.Position)))
        {
           lkl.Visible = false;
        }
    }

做完了! 我在網站上的第一個問題,我自己回答,非常棒:))

暫無
暫無

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

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