プロが教えるわが家の防犯対策術!

初めて質問させていただきます。C#初心者です。よろしくお願いします。
開発環境はMicrosoft Visual C# 2008です。

現在、UserControl1を作成して、label1にはテキストを入れています。

・label1をクリックすると、パネル(panel1)の背景色を変更。
・label1をダブルクリックすると、他のラベル(atai_text)にlabel1内のテキストを代入。

↑上記2つの処理をしたいのですが、クリックの方は処理できているのですが、ダブルクリックは反応せず、どのように作成すればよいかがわかりません。

<UserControl1.csの一部>
private void label1_Click(object sender, EventArgs e)
{
if (this.label1.BackColor == Color.Pink)
{
this.panel1.BackColor = Color.FromArgb(0xFF, 0xFF, 0x80);
}
else
{
this.panel1.BackColor = Color.Pink;
}
}

private void label1_DoubleClick(object sender, EventArgs e)
{
this.atai_text.Text = this.label1.Text;
}

どなたかご教授よろしくお願いします。

A 回答 (1件)

VS2005で試してみましたが、ちゃんと動作しました。



原因としては、label1のDoubleClickイベントにlabel1_DoubleClickを呼び出すイベントハンドラが登録されていない、とか??

label1_DoubleClickメソッドを手書きしたのならその可能性があるかと。
その場合は、コンストラクタに次のコードを追加してみてください。

label1.DoubleClick += new EventHandler(label1_DoubleClick);

また、ダブルクリックの場合でもクリックイベントは発生します。
完全に動作を分離する(ダブルクリック時はクリックイベント処理を行わない)には少々厄介かも。。。

クリック時にインターバルを0.5秒程度にしてタイマースタート。
ダブルクリックでなければ0.5秒後にタイマーのTickイベントでクリック時の処理を行う。
ダブルクリックだったらタイマー停止して、クリック処理を阻止。

以前は、こんな風に動作を分離したことがあります。.NETでも同じような手続きが必要になるのか、動作を分離してくれる機能があるのかは不明です。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

ご指摘どおり、label1_DoubleClickメソッドを手書きしていたため、イベントハンドラが登録されていませんでした。
コードを追加すると、ちゃんと動作するようになりました!

今のところ、完全に分離しなくても問題なさそうです。
本当にありがとうございました!

お礼日時:2010/01/03 14:23

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!