
No.1ベストアンサー
- 回答日時:
こんばんは。
此れはリストボックスをサブクラス化して、WM_LBUTTONDOWNを引っ掛けるしか道はなさそうです。
其れにはNativeWindowクラスを継承して、WndProcメソッドをオーバーライドします。
http://msdn.microsoft.com/ja-jp/library/system.w …
当方も初めて試したのですが、以下で目的は達成出来ると思います(二度目のクリック確認用にメッセージボックスを出していたのですが、WndProc内でモーダルすると、リストボックスのフォーカスがおかしくなるので省いています)。
参考程度になれば。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
ListBoxProc listBoxProc;
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
this.listBoxProc = new ListBoxProc(this.listBox1);
}
}
//サブクラス化用のクラス
public class ListBoxProc : NativeWindow
{
const UInt32 WM_LBUTTONDOWN = 0x201;
ListBox listBox;
public ListBoxProc(ListBox listBox)
{
this.listBox = listBox;
//ココでフックがかかる
this.AssignHandle(this.listBox.Handle);
}
protected override void WndProc(ref Message m)
{
if (m.Msg == WM_LBUTTONDOWN)
{
UInt32 lParam = (UInt32)m.LParam;
Point point = new Point();
point.X = (Int32)(lParam & 0xffff);
point.Y = (Int32)(lParam >> 16);
//マウス座標からアイテム番号へ変換
Int32 index = this.listBox.IndexFromPoint(point);
//有効なアイテム番号だった
if (index != -1)
{
//このアイテム番号は選択されている
if (this.listBox.SelectedIndex == index)
{
//ココにくる
}
}
}
base.WndProc(ref m);
}
}
}
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Junitテストでvoid戻り値メッソ...
-
ユーザーコントロールを動的に...
-
C# MouseHoverを何度も呼ぶには
-
unityでのC++エラーの原因がわ...
-
ボタンのイベントで異なるウィ...
-
プログラミング(Java)じゃん...
-
C#でのWNetAddConnection3の使...
-
コンボボックスを使う時の警告
-
大量のデータを読み込んで表示...
-
C#でダブルクリックイベント起...
-
C# DataGridView列カスタマイズ
-
パソコンキーボードで時分秒を...
-
ORA-01858: 数値を指定する箇所...
-
C言語のポインターに関する警告
-
JSPやサーブレットでSystem.out...
-
ループ処理の際、最後だけ","を...
-
System.err. printlnとSystem.o...
-
IF関数でEmpty値を設定する方法。
-
オブジェクトの中のプロパティ...
-
eclipseでコンソールのピン留め...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C#で、あるクラスのメンバーす...
-
大量のデータを読み込んで表示...
-
C#でのWNetAddConnection3の使...
-
C# WinForm のDataGridView Cel...
-
C#から、C++で作成したdll内の...
-
C# DataGridView列カスタマイズ
-
Junitテストでvoid戻り値メッソ...
-
C#でキーイベントが発生しない...
-
C#で別のFormへ複数の値を返そ...
-
ボタンの複数割り当てについて
-
C# visibleプロパティをfalseに...
-
C# 親フォームで指定した値を...
-
Processingでマウスクリックで...
-
C# 矢印キーの取得
-
決められて時間が経過するとア...
-
C# タスクバーを隠したフォーム...
-
ユーザーコントロールを動的に...
-
コンボボックスを使う時の警告
-
ボタンのイベントで異なるウィ...
-
[C#.net]スレッド化された別フ...
おすすめ情報