2016-06-20 4 views
0

TextBoxから継承するカスタムコントロールがあります。キューのテキストが表示されるように、Cueプロパティを追加しました。キューテキストを表示するには:EnabledまたはReadOnlyを使用せずにテキスト入力を無効にする

SendMessage(this.Handle, 0x1501, (IntPtr)1, myCueText); 

私はテキストボックスを無効にする必要があり、キューテキストは表示されたままにしておきます。私は試しました:

textBox.ReadOnly = true; 
textBox.BackColor = SystemColors.Window; 

上記のコードは、キューのテキストを消滅させます。私はEnabledを使ってみましたが、上記と同じ効果があります。

テキストボックスを無効にする代替方法はありますが、キューのテキストは引き続き表示されますか?

+2

キューバナーの全体のポイントは、ユーザーに彼らがテキストボックスに入力する必要があるかについてのヒントを与えることです。テキストボックスに入力できない場合は、キューバナーのポイントは何ですか?無効になっているテキストボックスの内部にテキストを表示する必要がある場合は、TextプロパティとEnabledプロパティを設定します。テキストはグレー表示/非表示になり、キューバナーのように表示されます。 –

+0

[Here](http://stackoverflow.com/a/36534068/3110834)は、ヒント(または透かしまたはキュー)の表示をサポートする 'TextBox'の実装です。 **•**ヒントMultiLineがtrueのとき ** ** ** WM_PAINTメッセージの処理とヒントの描画に基づいています。ヒントをカスタマイズして、ヒントカラーのようなプロパティを追加することも、ヒントを表示するタイミングを決定することもできます。 –

+0

'!this.Focused'の代わりにリンクされた' TextBox'のカスタマイズとして、 '(!this.Focused || this.ReadOnly)'を使うことができます。この方法で、ヒントは 'ReadOnly'テキストボックスに表示されます。 –

答えて

-1

あなたが変更されているコンテンツを防ぐために、イベントを扱うことができる - 多分、これらの線に沿って何かを試してみてください。

this.textBox1.TextChanged += (object src, EventArgs a) => { TextBox tb = src as TextBox; if (tb.Focused) { tb.Text = tb.Tag as string; /* do not allow interactive changes, restore previous text */} }; 
    this.textBox1.Enter += (object src, EventArgs a) => { TextBox tb = src as TextBox; tb.Tag = tb.Text; /* keep a back-up of the original text on focus so we can restore it on change */ }; 
    this.textBox1.KeyDown += (object src, KeyEventArgs a) => { a.SuppressKeyPress = true; /* explicitly prevent keystrokes to avoid any flicker - might want to tweak this to allow cursor and related keys */}; 
関連する問題