すべてのカテゴリ » インターネット・パソコン » 技術・プログラミング

質問

終了

C# 2008で、複数行入力可能なtextBoxの行間を変えるために、FontHeightプロパティを変更しようとして、
textBox1.FontHeight = 20;
としたのですが、ビルドすると、

エラー:
'System.Windows.Forms.TextBox' 型の修飾子をとおして プロテクト メンバ 'System.Windows.Forms.Control.FontHeight' にアクセスすることはできません。修飾子は 'DataGridAddRowTime.Form1' 型、またはそれから派生したものでなければなりません。

となってしまいます。どうすればtextBoxのFontHeightを変更できるのでしょうか?

  • 質問者:ss
  • 質問日時:2009-01-05 00:06:32
  • 0

並び替え:

FontHeightがプロテクトプロパティであることが原因です。

C#を含め、大抵のプログラム言語にはメソッドやプロパティ等にアクセスレベルが存在します。
C#の場合は、public、internal、protected internal、protected、privateの5つです。
publicが最もアクセスレベルがゆるく、どのクラスからでもコールできます。
privateが最もアクセスレベルがきつく、自身のクラスからしかコールできません。
protectedの場合は、自身のクラスまたは派生クラスからコールする事ができます。
アクセスレベルについての詳細はこちら。
http://msdn.microsoft.com/ja-jp/library/ba0a1yw2(VS.80).aspx

今回の場合、あなたの作成したクラスが
・TextBoxではない。
・TextBoxから派生したクラスではない。
ため、プロテクトプロパティであるFontHeightが呼び出せなかったという訳です。

対策としては、
・TextBoxを継承したMyTextBoxを作成する。
・MyTextBoxにFontHeightを変更するpublicメソッドを用意する。
・TextBoxの代わりにMyTextBoxを利用する。
・MyTextBoxのFontHeightを変更するメソッドを使って、FontHeightを設定する。
といった事を行えば実現できると思います。

class MyTextBox : TextBox {
 public void SetFontHeight(int height)  {
  this.FontHeight = height;
 }
}
class Hoge {
 meTextBox1.SetFontHeight(20);
}

  • 回答者:匿名希望 (質問から3時間後)
  • 2
この回答の満足度
  
参考になり、満足しました。回答ありがとうございました。
お礼コメント

そういうことでしたか!
わかりやすい説明ありがとうございます。
やってみます。

関連する質問・相談

Sooda!からのお知らせ

一覧を見る