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

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

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

DataGridViewのマウスホイール操作

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

■83799 / inTopicNo.1)  DataGridViewのマウスホイール操作
  
□投稿者/ ふた (1回)-(2017/04/10(Mon) 18:17:14)

分類:[C#] 

VSバージョン:Express 2015
.NET Framework:4.5.2

DataGridViewのDataGridViewTextBoxColumn列のセルが数値の時、
編集モードのマウスホイール操作にて数値のインクリメント/デクリメントをしたいと思ってます。

DataGridViewTextBoxEditingControlにMouseWheelイベントを登録すれば、
マウスホイール操作時にイベントが発生すると思ったのですが上がってきません。

グリッドはスクロール表示する場合もあるので、ScrollBarsプロパティはBothになっており、
編集モード時のマウスホイール操作は、グリッドのスクロールバーが移動します。
(グリッドのMouseWheelイベントが発生します。)


DataGridViewTextBoxEditingControlにMouseWheelイベントを発生させるのには、
どうしたらよろしいでしょうか?ご教授お願い致します。

以下、サンプルコード ※イベント確認のためのコードとなってます。

private DataGridViewTextBoxEditingControl dgvTextEdit = null;

private void dgv_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
{
if (e.Control is DataGridViewTextBoxEditingControl)
{
if (dgv.CurrentCell.OwningColumn.Name == clmText.Name)
{
dgvTextEdit = (DataGridViewTextBoxEditingControl)e.Control;
dgvTextEdit.MouseWheel += DgvTextEdit_MouseWheel;
}
}
}

private void DgvTextEdit_MouseWheel(object sender, MouseEventArgs e)
{
int delta = e.Delta;
}

private void dgv_CellEndEdit(object sender, DataGridViewCellEventArgs e)
{
if (dgvTextEdit != null)
{
dgvTextEdit.MouseWheel -= new MouseEventHandler(DgvTextEdit_MouseWheel);
dgvTextEdit = null;
}
}

引用返信 編集キー/
■83802 / inTopicNo.2)  Re[1]: DataGridViewのマウスホイール操作
□投稿者/ 魔界の仮面弁士 (1254回)-(2017/04/10(Mon) 18:56:54)
No83799 (ふた さん) に返信
> DataGridViewのDataGridViewTextBoxColumn列のセルが数値の時、
> 編集モードのマウスホイール操作にて数値のインクリメント/デクリメントをしたいと思ってます。

ホイール操作は DataGridView 側で処理されてしまうので、

 void dgv_MouseWheel(object sender, MouseEventArgs e)
 {
  if (dgv.CurrentCellAddress.X == clmText.Index)
  {
   //
  }
 }

でどうでしょう。
引用返信 編集キー/
■83803 / inTopicNo.3)  Re[2]: DataGridViewのマウスホイール操作
□投稿者/ Hongliang (524回)-(2017/04/10(Mon) 19:32:40)
なお、ホイールスクロールをさせないためには、MouseWheelイベント内で以下のような処理を記述します。
((HandledMouseEventArgs)e).Handled = true;
// あと必要なのはIsCurrentCellEditMode辺りかな。
引用返信 編集キー/
■83804 / inTopicNo.4)  Re[3]: DataGridViewのマウスホイール操作
□投稿者/ ふた (2回)-(2017/04/10(Mon) 20:53:45)
魔界の仮面弁士さん
Hongliangさん

回答ありがとうございます。
2人の合わせ技でグリッドのスクロールはせず対象のセルでマウスホール操作を検知できました。
(グリッドのホイール操作で処理するしかないのですね・・・)

しかし、検知をしてdgv.CurrentCell.EditedFormattedValueにて編集中の値を取得することができたのですが、
EditedFormattedValueはgetしかないのでsetすることができません。

サンプルコードの用にDataGridViewTextBoxEditingControlのTextにsetして反映するしか方法はないのでしょうか?
再度質問申し訳ありませんが、ご回答宜しくお願い致します。





引用返信 編集キー/
■83805 / inTopicNo.5)  Re[4]: DataGridViewのマウスホイール操作
□投稿者/ Hongliang (525回)-(2017/04/10(Mon) 21:35:22)
EditingControl.Textに取得設定するのは駄目でしょうか?
引用返信 編集キー/
■83808 / inTopicNo.6)  Re[5]: DataGridViewのマウスホイール操作
□投稿者/ ふた (3回)-(2017/04/11(Tue) 09:26:57)
No83805 (Hongliang さん) に返信
> EditingControl.Textに取得設定するのは駄目でしょうか?

グローバル変数にDataGridViewTextBoxEditingControlを持たないとダメなのかな?と思ったのですが、
dgv.EditingControl.Textで編集モードのテキスト取得設定可能でした。

あとは変換処理等の実装なので、
期待する動作ができそうです。

ひとまず解決とさせて頂きます。
色々と有難うございました。
解決済み
引用返信 編集キー/

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


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

このトピックに書きこむ