C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

シングル・ダブルクリック時の処理

[トピック内 4 記事 (1 - 4 表示)]  << 0 >>

■95584 / inTopicNo.1)  シングル・ダブルクリック時の処理
  
□投稿者/ ファイター (17回)-(2020/08/20(Thu) 11:13:08)

分類:[.NET 全般] 

C# で以下のプログラムを作成したのですが
シングルクリックでツリーの展開等の処理は行ってほしいのですが
ダブルクリック時にはツリーの展開等の処理は行ってほしくないのです。
どうすればよいのでしょうか?

private bool isFirstClick = true;
private Rectangle doubleClickRectangle = new Rectangle();
private int milliseconds = 0;
private bool isDoubleClick = false;

private void trv_MouseDown(object sender, MouseEventArgs e)
{
 if (isFirstClick)
 {
  isFirstClick = false;
  doubleClickRectangle = new Rectangle(e.X - (SystemInformation.DoubleClickSize.Width / 2), e.Y - (SystemInformation.DoubleClickSize.Height / 2),
  SystemInformation.DoubleClickSize.Width, SystemInformation.DoubleClickSize.Height);
  Invalidate();
  tmr.Start();
 }
 else
 {
  if (doubleClickRectangle.Contains(e.Location) && milliseconds < SystemInformation.DoubleClickTime) isDoubleClick = true;
 }
}

private void tmr_Tick(object sender, EventArgs e)
{
 milliseconds += 100;
 if (milliseconds >= SystemInformation.DoubleClickTime)
 {
  tmr.Stop();
  if (isDoubleClick)
  {
   MessageBox.Show("Double Click");
  }
  else
  {
   MessageBox.Show("Single Click");
  }
  isFirstClick = true;
  isDoubleClick = false;
  milliseconds = 0;
 }
}

引用返信 編集キー/
■95586 / inTopicNo.2)  Re[1]: シングル・ダブルクリック時の処理
□投稿者/ KOZ (137回)-(2020/08/20(Thu) 17:59:11)
No95584 (ファイター さん) に返信
> シングルクリックでツリーの展開等の処理は行ってほしいのですが
> ダブルクリック時にはツリーの展開等の処理は行ってほしくないのです。

親ノードをダブルクリックすると子ノードが開閉するのは既定の動作です。

ですのでダブルクリック時にノードが開いていたら閉じるような操作、または
サブクラス化してメッセージを無視するようにしなければならないと思います。

ですが、たとえ実装できたとしても操作に違和感のある UI になってしまわないでしょうか?
引用返信 編集キー/
■95598 / inTopicNo.3)  Re[1]: シングル・ダブルクリック時の処理
□投稿者/ 大谷刑部 (96回)-(2020/08/24(Mon) 17:26:38)
No95584 (ファイター さん) に返信
> シングルクリックでツリーの展開等の処理は行ってほしいのですが
> ダブルクリック時にはツリーの展開等の処理は行ってほしくないのです。
> どうすればよいのでしょうか?

クリックイベント以前にノード展開のイベントが起きてしまうようなので、BeforeExpandイベントの時点で条件分岐して無効(e.cancel=true)にするしかないようです。
ただ、クリックイベントよりも前なので、普通のやり方ではダブルクリックしてるかどうかは判定できない。
何らかの方法でイベントの順番を入れ替えるしかないみたいです。

↓過去ログで同じようなこと聞いて、イベントの順番入れ替える方法を回答してた人がいるので、この方法を参考に試してみては?
http://bbs.wankuma.com/index.cgi?mode=al2&namber=27505&KLOG=50

引用返信 編集キー/
■95621 / inTopicNo.4)  Re[2]: シングル・ダブルクリック時の処理
□投稿者/ 大谷刑部 (97回)-(2020/08/26(Wed) 15:24:40)
No95598 (大谷刑部 さん) に返信
> ↓過去ログで同じようなこと聞いて、イベントの順番入れ替える方法を回答してた人がいるので、この方法を参考に試してみては?
> http://bbs.wankuma.com/index.cgi?mode=al2&namber=27505&KLOG=50
>

上記の方法は過去ログの時点ではわかりませんが、.Net4.xx 以降ではどうやら、ダブルクリックの2回目を抑止することしかできないようですね。
試してみましたが、結果、シングルクリックと同じ動きになります。
引用返信 編集キー/

このトピックをツリーで一括表示


トピック内ページ移動 / << 0 >>

このトピックに書きこむ