2014/04/11

ラベルをダブルクリックするとコピーされる

.NETアプリでラベルをダブルクリックすると、そのテキストが勝手にコピーされちゃうって話

最近、会社で随分前に作った.NET1.1向けのアプリをWindows7でも動く様に手直しする仕事をしています。
…と言っても1.1で作られたアプリは一応CLR2.0上で動作するし、実際に不具合は無いみたいだったので放置でも良かったのですが、バグも多かったし直すついでにね。

その際、UIの角ばったボタンやテキストボックスも嫌だったので、
  Application.EnableVisualStyles() を使って見た目をWin7風にしたところ、表題の『ラベルをダブルクリックするとコピーされる』現象に出くわしました。

最初は困惑しましたが、どうやらそういう仕様に変わったみたいですね…。
これ、一見便利な気もするけど非常に困る。この機能だけ無効にする事も出来ない様子でMicroSoftさんマジ勘弁してくださいよというのが正直なところ。

(ラベルダブルクリックで別フォームを呼び出すような方法が良くないといえばそれまでですが)


この自動ラベルコピー(と呼ぶべき?)は、UIのスタイルにかかわらず、Application.EnableVisualStyles()を呼んだ事によって発生するみたいです。

試しにこんなコードを書いて角ばったUIにしても自動ラベルコピーは出来てしまう。

Module Module1
    Sub Main()

        Application.EnableVisualStyles()
        Application.VisualStyleState = VisualStyles.VisualStyleState.NonClientAreaEnabled
        Application.Run(New Form1)
    End Sub
End Module


尚、プロジェクトのプロパティで『アプリーションフレームワークを有効にする』にチェックを入れてる場合は、その下の『XP Visualスタイルを有効にする』にチェックが入っていると自動ラベルコピー状態になります。

結局のところ、自動ラベルコピーが嫌な場合は、古いUIデザインで我慢するか、個別に何か処理を加えるとか、ラベルコントロールを自作するとか…状況に応じて考えなきゃイカン感じです。



0 件のコメント:

コメントを投稿