ボタンコントロールのダブルクリックイベント – プログラミング – Home

ボタンコントロールのダブルクリックイベ...
 
通知
すべてクリア

[解決済] ボタンコントロールのダブルクリックイベント


KEN
 KEN
(@KEN)
ゲスト
結合: 22年前
投稿: 77
Topic starter  

複数スレを立ててすみません。

VC++/CLI

フォームにボタンが1つ張ってありボタンコントロールのダブルクリックイベントを取
得したいのですがどうやら.NET Compact Framework では、ボタンの Windows フォーム
DoubleClick イベントをサポートしていないようです(><)

ボタンのクラスを継承したカスタムのダブルクリック処理を実装したクラスを作成しな
ければならないのでしょうか?

http://msdn2.microsoft.com/ja-jp/library/ms172533(VS.80).aspx

上記のサイトでサンプルソースがあったのですがC#のためCLIでの実装方法が良く分かり
ません(><)クラスについてもっと勉強するべきですが教えていただけたら幸いで
す。宜しくお願いします。


引用未解決
トピックタグ
Blue
 Blue
(@Blue)
ゲスト
結合: 20年前
投稿: 1467
 

> C#のためCLIでの実装方法が良く分かりません
とりあえず、
> http://rararahp.cool.ne.jp/cgi-bin/lng/vc/vclng.cgi?print+200703/07030052.txt
のようにサブクラスを用意すれば、ほぼC#と同じように実装できるはずですけど。

>勉強するべきですが
そうですね。
入門書ぐらいは読まれたほうが良いです。

お勧めは
http://www.cbook24.com/bm_detail.asp?sku=4797336277
です。(私も持っています)


返信引用
Ban
 Ban
(@ban)
Prominent Member
結合: 5年前
投稿: 776
 

# 私も同じ本を持ってますが、お勧めというかC++/CLIだとあまり有効な対抗馬がない…?


返信引用
Blue
 Blue
(@Blue)
ゲスト
結合: 20年前
投稿: 1467
 

> ほぼC#と同じように実装できるはずですけど。
といったものも、

>public new event EventHandler DoubleClick;
をどう書き換えるのかわからない、、、

>protected new virtual void OnDoubleClick(EventArgs e)
に関しては

protected:
System::Void virtual OnDoubleClick(System::EventArgs^ e) new

でOKだとおもうんだけど。


返信引用
Blue
 Blue
(@Blue)
ゲスト
結合: 20年前
投稿: 1467
 

◎DoubleClickButton.h

#pragma once

ref class DoubleClickButton :
public System::Windows::Forms::Button
{
int previousClick;
public:
DoubleClickButton(void);

event System::EventHandler^ DoubleClick;

protected:
System::Void virtual OnClick(System::EventArgs^ e) override;
System::Void virtual OnDoubleClick(System::EventArgs^ e) new;
};

◎DoubleClickButton.cpp

#include StdAfx.h
#include DoubleClickButton.h

using namespace System::Windows::Forms;

DoubleClickButton::DoubleClickButton(void)
{
this->previousClick = SystemInformation::DoubleClickTime;
}

System::Void DoubleClickButton::OnClick(System::EventArgs^ e)
{
int now = System::Environment::TickCount;

if (now - previousClick <= SystemInformation::DoubleClickTime)
{
//if (this->DoubleClick != nullptr) // C3918
this->DoubleClick(this, System::EventArgs::Empty);
}
this->previousClick = now;
Button::OnClick(e);
}

System::Void DoubleClickButton::OnDoubleClick(System::EventArgs^ e)
{
//if (this->DoubleClick != nullptr) // C3918
this->DoubleClick(this, e);
}

◎Form1.h

#include DoubleClickButton.h

// InitializeComponent
> private: System::Windows::Forms::Button^ button1;
private: DoubleClickButton^ button1;
> this->button1 = (gcnew System::Windows::Forms::Button());
this->button1 = (gcnew DoubleClickButton());

this->button1->DoubleClick += gcnew System::EventHandler(this,
&Form1::button1_DoubleClick);

Void button1_DoubleClick(Object^ sender, EventArgs^ e)
{
MessageBox::Show(L");
}

とりあえずこれで動いているようです。
// C3918
のところはコメントアウトして動かすのが普通なのかわよくわからない。


返信引用
KEN
 KEN
(@KEN)
ゲスト
結合: 22年前
投稿: 77
Topic starter  

Blueさん

こんにちは、いつもながらサンプルコードと解説ありがとうございます。おかげさまで
やりたかったことが無事に実現できました。

C#からCLIへのコード変換ですが思っていたより難しいですね・・・。Blueさんお勧めの
本を今朝、購入しました。CLIは参考文献が少ないと聞いていましたので役に立ちそうで
す。もっとメジャーになってくれれば逆引き辞典なるものが出てくるのでしょうけど。

熟読してCLIを極めて行きたいと思います(^^)今後とも宜しくお願いします。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました