web-dev-qa-db-ja.com

無効なTextBoxのフォントの色を変更する方法は?

誰がどのプロパティが無効なコントロールのテキストの色を設定するか知っていますか?無効なTextBoxにテキストを表示する必要があり、その色を黒に設定します。

57
Niko Gamulin

注:このソリューションを機能させるための前提条件を特定するため、以下のチーターの回答を参照してください。 BackColorTextBoxを設定します。


あなたが本当にしたいことは、TextBoxを有効にし、ReadOnlyプロパティをtrueに設定することだと思います。

無効なTextBoxのテキストの色を変更するのは少し難しいです。 OnPaintイベントをサブクラス化してオーバーライドする必要があると思います。

ReadOnly!Enabledと同じ結果を提供し、TextBoxの色と書式の制御を維持できるようにする必要があります。 TextBoxからのテキストの選択とコピーも引き続きサポートすると思いますが、これは無効なTextBoxでは不可能です。

別の単純な代替方法は、Labelの代わりにTextBoxを使用することです。

54
Eric Schoonover

さらに、ReadOnlyとマークされたTextBoxでForeColorに従うためには、BackColorを明示的に設定する必要があります。まだデフォルトのBackColorを使用したい場合は、セットを明示的にする必要があります。デザイナーはあまりにも頭がいいので、ここではうまくいきません。 BackColorを現在の値に設定するだけで十分です。これは、フォームのLoadイベントで次のように行います。

private void FormFoo_Load(...) {
    txtFoo.BackColor = txtFoo.BackColor;
}
55
Cheetah

hi読み取り専用属性をコード側または設計時ではなく実行時からtrueに設定します

txtFingerPrints.BackColor = System.Drawing.SystemColors.Info;
txtFingerPrints.ReadOnly = true;
5
syed qaiser

私はちょうどそれをする素晴らしい方法を見つけました。私の例では、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を安全に設定できます。これはラベルのように機能し、実際に無効にされることなく、フォーカス、ユーザー入力、カーソルの変更を防ぎます。

動作するか確認してください。あいさつ

4
edoedoedo

これを試すことができます。 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();

したがって、コントロールはフォーカスされず、無効のように動作しません。

2
Zain Ali

有効に変更を処理し、必要な色に設定するだけです

private void TextBoxName_EnabledChanged(System.Object sender, System.EventArgs e)
{
    ((TextBox)sender).ForeColor = Color.Black;
}
1
Mahmoud Salah

編集または選択できないテキストを表示する場合は、単にラベルを使用できます

0
karl f

@ spoon16および@Cheetahによる回答に加えて、テキストボックスでtabstopプロパティを常にFalseに設定して、デフォルトでテキストが選択されないようにします。

または、次のようなこともできます。

private void FormFoo_Load(...) {
    txtFoo.Select(0, 0);
}

または

private void FormFoo_Load(...) {
    txtFoo.SelectionLength = 0;
}
0
Johnie Karr