C#のTextBoxでロック(Enable=false)した際に画面グレーにしない方法
C#でテキストボックス(TextBox, RichTextBox)の画面をロックしようとして、Enable=falseにすると画面がグレーになってしまいます。画面色を変えずにロックする方法を紹介します。
グレーにしたくない理由として、テキストボックス上で何か処理する際に、画面の状態を変えたくない場合(チラつき防止など)に使いたいのですが、グレーになると結局チラつきが出てしまうのです。
[ad#top-1]
Windows APIを使うしかない
結局のところ、WindowsAPIを使うしか手はないんですね。
コンストラクタの前あたりにこれを書きます。
[System.Runtime.InteropServices.DllImport("user32")] private static extern int SendMessage(IntPtr hWnd, uint Msg, long wParam, long lParam);
で、画面ロックする際に以下のようにEnableプロパティの変更と併用すればOKです。
SendMessage(textBox.Handle, 0x000B, 0, 0); textBox.Enabled = false;
以下のように画面ロックしても色は変わりません。
今回のサンプルのソースコード全文
図で表したもののソースコード全文を載せておきます。
using System; using System.Drawing; using System.Windows.Forms; using System.Collections.Generic; class EnableTest{ static void Main(string[] args){ Application.Run(new MainWindow(args)); } } class MainWindow : Form{ private RichTextBox textBox; //ウィンドウの再描画を無効 [System.Runtime.InteropServices.DllImport("user32")] private static extern int SendMessage(IntPtr hWnd, uint Msg, long wParam, long lParam); public MainWindow(string[] args){ this.StartPosition = FormStartPosition.CenterScreen; this.Width = 600; this.Height =400; this.Text = "テキストボックステスト"; textBox = new RichTextBox(){ Dock = DockStyle.Fill, Font = new Font("MS ゴシック", 18), Parent=this, }; textBox.DoubleClick += new EventHandler(DoubleClicked); } private void DoubleClicked(object sender, EventArgs e) { SendMessage(textBox.Handle, 0x000B, 0, 0); textBox.Enabled = false; } }
[ad#ad-1]
スポンサーリンク