3
LinkLabel label = new LinkLabel();
// imagine there is a code to initialize the label
label.Click += (sender, args) => callback1();
label.LinkClicked += (sender, args) => callback2();

リンクをクリックせずにラベルをクリックするcallback1()と、どちらが正しいかが呼び出されます。
ラベルのリンクをクリックすると、callback1()との両方callback2()が呼び出されます。

callback2()通話のみにするにはどうすればよいですか?

4

2 に答える 2

2

私が考えることができる2つの解決策。最初のものは非常にばかげたものですが、かなり効果的です。マウスがリンクの上にあるときにクリックするのは好きではありません。これには副作用があり、マウスカーソルが変わります。したがって、カーソルの形状を確認してフィルタリングできます。

private void linkLabel1_Click(object sender, EventArgs e) {
    if (Cursor.Current == Cursors.Default) {
       Debug.WriteLine("Click!");
       // etc...
    }
}

多くのリンク ラベルがある場合、もう少し原則的で便利な方法は、マウスがリンク上にある場合に Click イベントをまったく発生させないことです。プロジェクトに新しいクラスを追加し、次のコードを貼り付けます。

using System;
using System.Windows.Forms;

class LinkLabelEx : LinkLabel {
    protected override void OnClick(EventArgs e) {
        var loc = this.PointToClient(Cursor.Position);
        if (this.PointInLink(loc.X, loc.Y) == null) base.OnClick(e);
    }
}
于 2016-05-15T12:20:07.153 に答える