誰がどのプロパティが無効なコントロールのテキストの色を設定するか知っていますか?無効なTextBox
にテキストを表示する必要があり、その色を黒に設定します。
注:このソリューションを機能させるための前提条件を特定するため、以下のチーターの回答を参照してください。 BackColor
のTextBox
を設定します。
あなたが本当にしたいことは、TextBox
を有効にし、ReadOnly
プロパティをtrue
に設定することだと思います。
無効なTextBox
のテキストの色を変更するのは少し難しいです。 OnPaint
イベントをサブクラス化してオーバーライドする必要があると思います。
ReadOnly
は!Enabled
と同じ結果を提供し、TextBox
の色と書式の制御を維持できるようにする必要があります。 TextBox
からのテキストの選択とコピーも引き続きサポートすると思いますが、これは無効なTextBox
では不可能です。
別の単純な代替方法は、Label
の代わりにTextBox
を使用することです。
さらに、ReadOnlyとマークされたTextBoxでForeColorに従うためには、BackColorを明示的に設定する必要があります。まだデフォルトのBackColorを使用したい場合は、セットを明示的にする必要があります。デザイナーはあまりにも頭がいいので、ここではうまくいきません。 BackColorを現在の値に設定するだけで十分です。これは、フォームのLoadイベントで次のように行います。
private void FormFoo_Load(...) {
txtFoo.BackColor = txtFoo.BackColor;
}
hi読み取り専用属性をコード側または設計時ではなく実行時からtrueに設定します
txtFingerPrints.BackColor = System.Drawing.SystemColors.Info;
txtFingerPrints.ReadOnly = true;
私はちょうどそれをする素晴らしい方法を見つけました。私の例では、RichTextBoxを使用していますが、どのコントロールでも動作するはずです。
public class DisabledRichTextBox : System.Windows.Forms.RichTextBox
{
// See: http://wiki.winehq.org/List_Of_Windows_Messages
private const int WM_SETFOCUS = 0x07;
private const int WM_ENABLE = 0x0A;
private const int WM_SETCURSOR = 0x20;
protected override void WndProc(ref System.Windows.Forms.Message m)
{
if (!(m.Msg == WM_SETFOCUS || m.Msg == WM_ENABLE || m.Msg == WM_SETCURSOR))
base.WndProc(ref m);
}
}
Enabled = trueおよびReadOnly = falseを安全に設定できます。これはラベルのように機能し、実際に無効にされることなく、フォーカス、ユーザー入力、カーソルの変更を防ぎます。
動作するか確認してください。あいさつ
これを試すことができます。 TextBoxのOnPaintイベントをオーバーライドします。
protected override void OnPaint(PaintEventArgs e)
{
SolidBrush drawBrush = new SolidBrush(ForeColor); //Use the ForeColor property
// Draw string to screen.
e.Graphics.DrawString(Text, Font, drawBrush, 0f,0f); //Use the Font property
}
controlStylesを「UserPaint」に設定します
public MyTextBox()//constructor
{
// This call is required by the Windows.Forms Form Designer.
this.SetStyle(ControlStyles.UserPaint,true);
InitializeComponent();
// TODO: Add any initialization after the InitForm call
}
または、このハックを試すことができます
Enterイベントでフォーカスを設定します
int index=this.Controls.IndexOf(this.textBox1);
this.Controls[index-1].Focus();
したがって、コントロールはフォーカスされず、無効のように動作しません。
有効に変更を処理し、必要な色に設定するだけです
private void TextBoxName_EnabledChanged(System.Object sender, System.EventArgs e)
{
((TextBox)sender).ForeColor = Color.Black;
}
編集または選択できないテキストを表示する場合は、単にラベルを使用できます
@ spoon16および@Cheetahによる回答に加えて、テキストボックスでtabstop
プロパティを常にFalseに設定して、デフォルトでテキストが選択されないようにします。
または、次のようなこともできます。
private void FormFoo_Load(...) {
txtFoo.Select(0, 0);
}
または
private void FormFoo_Load(...) {
txtFoo.SelectionLength = 0;
}