2015/06/15(月) [n年前の日記]
#1 [prog] C#と.NETの勉強中
色々勉強中。
◎ ComboBoxにフォーカスが残り続ける問題。 :
ComboBox に何か入力したり、リストから何かを選んだりすると、その後 ComboBox にフォーカスが残り続けて、カーソルキーでキャンバス?上の画像を移動しようとすると ComboBox の入力欄までカーソルキーに反応しちゃう、という問題があったのだけど。
色々ググってたら、PictureBox も Focus() を呼んでフォーカスをあてられるようで。マウスカーソルが領域に入るたびに、つまり MouseEnter イベントが起きるたびに pictureBox1.Focus() を呼んだら ComboBox からフォーカスが外れてくれた。
と思ったら、コレだと PictureBox を置いている Panel のスクロール位置がおかしなことになる…。PictureBox をクリックすると左上に戻ってしまうというか…。画像をクリックして選択した瞬間にスクロール位置が変わって PictureBox の左上のほうに画像が瞬間移動というかドラッグされた状態になる。これでは使えん。仕方ないので、この方法は諦めた。
その後もググってたら、そもそも .ActiveConrol に null を入れればコントロールが外れるらしくて。
これであっさりフォーカスが外れてくれた。分かってみれば、散々悩んでたのがバカみたい…。
色々ググってたら、PictureBox も Focus() を呼んでフォーカスをあてられるようで。マウスカーソルが領域に入るたびに、つまり MouseEnter イベントが起きるたびに pictureBox1.Focus() を呼んだら ComboBox からフォーカスが外れてくれた。
と思ったら、コレだと PictureBox を置いている Panel のスクロール位置がおかしなことになる…。PictureBox をクリックすると左上に戻ってしまうというか…。画像をクリックして選択した瞬間にスクロール位置が変わって PictureBox の左上のほうに画像が瞬間移動というかドラッグされた状態になる。これでは使えん。仕方ないので、この方法は諦めた。
その後もググってたら、そもそも .ActiveConrol に null を入れればコントロールが外れるらしくて。
- ComboBox 上で Enterキーを叩いたり (KeyDownイベント内で e.KeyCode == Keys.Enter をチェック)
- リストから選んだり (SelectedIndexChangedイベント内で .SelectedIndex >= 0 なら何か選ばれた)
これであっさりフォーカスが外れてくれた。分かってみれば、散々悩んでたのがバカみたい…。
◎ マウスのホイール回転でズーム。 :
マウスのホイール回転でズームさせたい。VisualStudio 上でマウスホイールのイベントはGUIで設定できないので、Form の Load イベント内でホイールイベントを登録。e.Delta が 120,-120 の値で回した方向を返すので、それを見て拡大率を変更。
ところが、それで一応ズーム変更できたけど、Panel 上のスクロールバーもホイール回転で反応してしまう…。スクロールバーをホイール回転で動かないようにしたいけど方法が分からず。仕方ないのでこれも諦めた。代わりに、拡大縮小のショートカットキーを用意して、それで済ませることに。
Photoshop のショートカットキーに合わせたほうがいいよな…。Photoshop Elements を起動して確認したところ、Ctrl + ;、Ctrl + - で反応するっぽい。一般的には Ctrl + +、Ctrl + - がショートカットキーということになってるけれど、Shift + ; で + を入力しないといけないわけではなくて、Ctrl + ; だけでいいのだな…。
Ctrlキーが押されてるかどうかは、(Control.ModifierKeys & Keys.Control) == Keys.Control をチェック。+(;)、-キーは、e.KeyCode == Keys.Oemplus、e.KeyCode == Keys.OemMinus をチェック。
ついでにテンキー側の + / - だけでも反応するように。Keys.Add、Keys.Subtract がテンキー側の +/- になってるらしい。
参考ページ。
_【C#】マウスホイールイベントの追加方法 画像処理ソリューション
_Keys 列挙体 (System.Windows.Forms)
_スモキンカゴーン 【C#】Keys列挙体の定義値一覧
_c# - Using + (plus) and - (minus) keyboard keys as incrementors and decrementors in a DataGridView - Stack Overflow
ところが、それで一応ズーム変更できたけど、Panel 上のスクロールバーもホイール回転で反応してしまう…。スクロールバーをホイール回転で動かないようにしたいけど方法が分からず。仕方ないのでこれも諦めた。代わりに、拡大縮小のショートカットキーを用意して、それで済ませることに。
Photoshop のショートカットキーに合わせたほうがいいよな…。Photoshop Elements を起動して確認したところ、Ctrl + ;、Ctrl + - で反応するっぽい。一般的には Ctrl + +、Ctrl + - がショートカットキーということになってるけれど、Shift + ; で + を入力しないといけないわけではなくて、Ctrl + ; だけでいいのだな…。
Ctrlキーが押されてるかどうかは、(Control.ModifierKeys & Keys.Control) == Keys.Control をチェック。+(;)、-キーは、e.KeyCode == Keys.Oemplus、e.KeyCode == Keys.OemMinus をチェック。
ついでにテンキー側の + / - だけでも反応するように。Keys.Add、Keys.Subtract がテンキー側の +/- になってるらしい。
参考ページ。
_【C#】マウスホイールイベントの追加方法 画像処理ソリューション
_Keys 列挙体 (System.Windows.Forms)
_スモキンカゴーン 【C#】Keys列挙体の定義値一覧
_c# - Using + (plus) and - (minus) keyboard keys as incrementors and decrementors in a DataGridView - Stack Overflow
◎ 中ボタンや右ボタンのドラッグでスクロール。 :
_イメージをスクロール表示してマウスでドラッグ可能に - C#.NET Tips
が参考になりました。ありがたや。
実は e.Location と e.X、e.Y の値の意味がよく分かってない自分。
中ボタンドラッグを実装してから、どうも使いづらくて右ボタンドラッグも追加したけど。右ボタンでコンテキストメニューを表示したほうがいいのだろうか…。Office系のドローツールなら、大体はコンテキストメニューでオブジェクトに対する処理ができるよな…。うーん。
参考ページ。
_01.マウスのどのボタンが押されたかを判断する < マウス Tips メニュー < C# 2003 Tips HOME < HIRO's.NET
実は e.Location と e.X、e.Y の値の意味がよく分かってない自分。
中ボタンドラッグを実装してから、どうも使いづらくて右ボタンドラッグも追加したけど。右ボタンでコンテキストメニューを表示したほうがいいのだろうか…。Office系のドローツールなら、大体はコンテキストメニューでオブジェクトに対する処理ができるよな…。うーん。
参考ページ。
_01.マウスのどのボタンが押されたかを判断する < マウス Tips メニュー < C# 2003 Tips HOME < HIRO's.NET
◎ その他参考ページ。 :
[ ツッコむ ]
以上です。