2012年5月1日火曜日

TextBoxコントロールのEnabledプロパティをFalseにしても前景色と背景色を変えないようにする: .NET Tips: C#, VB.NET


System.Windows.Forms.TextBoxコントロールのEnabledプロパティをFalseにすると、文字の色と背景が灰色になりますが、ここではEnabledプロパティをFalseにしても文字の色と背景色が変わらないようにする方法を紹介します。

BackColorを変更する

TextBoxの背景色だけであれば、EnabledプロパティをFalseにした後、BackColorプロパティを設定するだけで、色を変更できます。ただし、ForeColorはこの方法では変更できないようです。(.NET Framework 1.1、2.0で確認)

  TextBox1.Enabled = False    TextBox1.BackColor = TextBox1.BackColor  
  TextBox1.Enabled = false;    TextBox1.BackColor = TextBox1.BackColor;  

ReadOnlyにする

TextBoxの前景色を変えないようにするには、EnabledプロパティをFalseにする代わりに、ReadOnlyプロパティをTrueにするという方法があります。ReadOnlyプロパティをTrueにしても背景色は灰色となりますが、上の例と同様にBackColorプロパティを設定すれば、背景色を変えなくすることもできます。


11×17を行いますカラーLaserJetプリンタ

自分で描画する

ReadOnlyを使うのではなく、どうしてもEnabledプロパティをFalseにしても前景色と背景色が変わらないようにしたいということであれば、TextBoxクラスから派生したクラスを作成し、OnPaintメソッドをオーバーライドすることにより自分で文字列を描画するという方法があります。この方法は、「Windows Forms FAQ - 27.15 When I set a TextBox to Readonly or set Enabled to false, the text color is gray. How can I force it to be the color specified in the ForeColor property of the TextBox.」で紹介されています。しかし残念ながらここに紹介されている方法では、TextBoxのEnabledがTrueの時に別のフォント(システムフォント?)でTextが表示されてしまいます。

これを防ぐには、TextBoxのEnabledがFalseの時だけ自分で描画するようにします。次の例ではOnEnabledChangedメソッドをオーバーライドすることにより、EnabledがTrueの時のみ独自に描画するようにしています。このクラスはTextAlignやRightToLeftなどのプロパティを一切無視していますので、あくまで参考としてご覧ください。


私は、サーブレットで画像を呼び出すことができますか
    Class MyTextBox      Inherits TextBox        Protected Overrides Sub OnEnabledChanged(ByVal e As EventArgs)          MyBase.OnEnabledChanged(e)                    If Me.Enabled Then              Me.SetStyle(ControlStyles.UserPaint, False)          Else              Me.SetStyle(ControlStyles.UserPaint, True)          End If                    Me.Invalidate()      End Sub              Protected Overrides Sub OnPaint(ByVal e As PaintEventArgs)          MyBase.OnPaint(e)          Dim b As New System.Drawing.SolidBrush(Me.ForeColor)                    e.Graphics.DrawString(Me.Text, Me.Font, b, -1, 1)          b.
スプラッターブラシを作る方法
Dispose() End Sub End Class
    class MyTextBox : TextBox  {      protected override void OnEnabledChanged(EventArgs e)      {          base.OnEnabledChanged(e);                    if (this.Enabled)              this.SetStyle(ControlStyles.UserPaint, false);          else              this.SetStyle(ControlStyles.UserPaint, true);                    this.Invalidate();      }              protected override void OnPaint(PaintEventArgs e)      {          base.OnPaint(e);          System.Drawing.Brush b =              new System.Drawing.SolidBrush(this.ForeColor);                    e.Graphics.DrawString(this.Text, this.Font, b, -1, 1);          b.Dispose();      }  }  

このような方法を無理して使うよりも、できることならReadOnlyプロパティを使うか、別のもっと簡単な方法を考える方がよいでしょう。


注意:この記事では、基本的な事柄の説明が省略されているかもしれません。初心者の方は、特に以下の点にご注意ください。



These are our most popular posts:

サイエンス資料館|リコー・サイエンスキャラバン|Ricoh Japan

LinkIcon 河野綾佳さんからの質問 :「カラーコピーと白黒コピーの仕組みはどう違うの ?」 LinkIcon 黒田 歩さん、小松千優さん、小林 空さんからの質問:「コピーの実験は、 家でもできますか?」 LinkIcon 長倉義樹くん、北山なぎささん、坂井 響くんからの質問: 「 ... read more

プリント関連の新機能とプリントの手順 (Photoshop CS5)

Photoshop から印刷した結果に満足できなかった場合は、印刷設定ではなく、 Photoshop 上で直接画像を調整してください。 また、カラー管理を Photoshop で行った 場合とプリンタードライバーで行った場合、どのような違いが生じるか、一度実際にお 試し ... read more

コピーの不思議Q&A|Ricoh Japan

カラーコピーと白黒コピーの仕組みはどう違うの?」 カラーコピー機も白黒コピー機も、 基本的な原理は同じです。 つまり、感光紙に原稿の像を投影して(実験では原稿をひっ くり返して感光紙に重ね、光を当てました)静電気の像をつくり、そこにトナー(粉のインク ) ... read more

usr 06 - vimdoc-ja

|06.5| カラー印刷|06.6| 詳しい情報次章: |usr 07.txt| 複数のファイルを開く前章: | usr 05.txt| 設定の変更目次: |usr toc.txt| ... 背景色なら次のように設定してください: : set background=light このコマンドは :syntax enable より *前* に実行してください 。 read more

Related Posts



0 コメント:

コメントを投稿