1

ユーザーがフォームをクリックするたびにカーソル位置にラベルを付けたい。この質問の答えから: Getting mouse position in c#

利用した

    private void Form1_MouseClick(object sender, MouseEventArgs e)
    {
        Label lbl = new Label();
        lbl.Location = Cursor.Position;
        lbl.Visible = true;
        this.Controls.Add(lbl);
    }

しかし、プログラムを実行してフォームをクリックしても何も起こりません。

Plsは私が間違ったことをしましたか?

4

1 に答える 1

1

あなたのコードにはいくつかの問題があります。まず、screenCursor.Positionに対するカーソルの位置を返しますが、ラベルの位置はformに対して相対的に測定されます。これにより、実際にクリックした場所の左と下のどこかに (ほとんどの場合) ラベルが配置されます。Grooが指摘しているように、画面座標からクライアント (フォーム) 座標に変換できますが、この場合は必要ありません。PointToClientMouseEventArgs

2 番目の問題は、Visibleプロパティを に設定したにもかかわらずtrue(デフォルトで に設定されているため、実際には必要ありませんtrue)、表示するテキストを実際に指定していないことです。ラベルが追加されますが、表示されません。

イベントで指定された場所 ( ) を使用しe.Location、ラベルにテキスト ( lbl.Text) を付けて、実際に表示できるようにします。

private void Form1_MouseClick(object sender, MouseEventArgs e)
{
    Label lbl = new Label();
    lbl.Location = e.Location;
    lbl.Text = "Hello World";
    this.Controls.Add(lbl);
}

最後に、イベントをフォームに正しくバインドしていない場合は、必ずバインドしてください。

public Form1()
{
    InitializeComponent();
    this.MouseClick += Form1_MouseClick;
}
于 2013-09-05T22:17:44.280 に答える