WindowsXP VB.NetEEを使っています。
フォームに各種のコントロールを配置すると以下のように高さがComboBox
だけが違いExcel表のように並べて配置できません。Size_Heightプロパティ
を規定値から変更するにはどうすればいいのでしょうか。
Size_Height
TextBox 19 P
MaskedTextBox 19 P
DataTimePicker 19 P
ComboBox 20 P
> VB.NetEE
Visual Basic 2005 Express Edition のことでしょうか? それとも、
Visual Basic 2008 Express Edition のことでしょうか?
> 高さがComboBoxだけが違い
ItemHeight プロパティを使うと、ComboBox の高さが変化します。
ただし ItemHeight を使うには、DrawMode を Normal 以外に
設定する必要があるため、必要なコードは増加します。
http://dobon.net/vb/dotnet/control/cbchangeheight.html
もう一つの方法は、CB_SETITEMHEIGHT で変更する方法。
こちらはこんな感じ。
Private Sub Form1_Load(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Load
SetComboBoxEditHeight(ComboBox1, 14)
End Sub
Private Declare Auto Function SendMessage Lib "user32" ( _
ByVal hWnd As IntPtr, ByVal wMsg As Int32, _
ByVal wParam As IntPtr, ByVal lParam As IntPtr) As UInteger
Private Sub SetComboBoxEditHeight( _
ByVal comboBox As ComboBox, ByVal newHeight As Integer)
Const CB_SETITEMHEIGHT As Integer = &H153
SendMessage(comboBox.Handle, CB_SETITEMHEIGHT, -1, newHeight)
comboBox.Refresh()
End Sub
魔界の仮面弁士さん、早速ありがとうございました。
Visual Basic 2005 Express Edition のことです。すみません。
ComboBoxのSize_Heightを1ピクセル低く設定するのにこれほどコートを
記述する必要あるのですか。初心者には難しそうですね。とりあえず
TextBoxだけはMultlineをTrueに設定してSize_Heightを20ピクセルに
して使います。
DataTimePickerはフォントサイズを10に設定すると20ピクセルに変
わりました。今後のために、ご指導いただいたコードを試験して見ます。
ありがとうございました。
そもそも、Size_Heightプロパティというのが何の事なのか
分からないのですが、それは置いといて。
> TextBoxだけはMultlineをTrueに設定して
改行を入力させる必要があるならば、それでも良いですけれども、
下記のようにすれば、Multiline に関係なく高さを調整できますよ。
Private Sub Form1_Load(ByVal sender As Object, ByVal e As EventArgs) Handles MyBase.Load
TextBox1.AutoSize = False
TextBox1.Height = 30
End Sub
魔界の仮面弁士さん、親切な指導ありがとうございます。
Size_HeightプロパティはTextBoxのSizeプロパティを展開したときに表示
されるHeightプロパティの意味で記述下のですが表現がまづいですか?
ご指導いただいた以下のコードを早速テストして正常に動作しました。
TextBox1.AutoSize = False
TextBox1.Height = 30
お恥ずかしい話ですが、新米で次のことがよく理解できません。
1.VB 2005 Express Edition のプロパティ画面以外にもプロパティが
あるのですか
2."Text."と記述すると表示される IntelliSense の機能にもAutoSize
が表示されませんが?
もしヒントでもいただければ幸いです。よろしくお願いいたします。
> Size_HeightプロパティはTextBoxのSizeプロパティを展開したときに表示
> されるHeightプロパティの意味で記述下のですが表現がまづいですか?
現代仮名遣いにおける表現は、「まづい」→「まずい」です。
…というのはさておき。
その意図であれば、Size_Height では伝わりにくいかと思います。
この場合は、Size.Height の方が適切です。あるいは、単に Height ですね。
実際、VB のコードにおいては、
Dim h As Integer = TextBox1.Size.Height
とか、
TextBox1.Height = 100
のように書けるわけですし。
> 1.VB 2005 Express Edition のプロパティ画面以外にもプロパティが
> あるのですか
その通り。
プロパティ画面(PropertyGrid) に表示されない項目も、沢山用意されていますよ。
Top, Left, Right, Bottom, Width, Height プロパティなどが代表格ですね。
その逆に、実際のメンバとしては存在しないのに、プロパティ画面には
表示されるものさえあります。
たとえば、ErrorProvider コンポーネント(赤い“!”アイコン)を
フォームに貼ると、それぞれのコントロールのプロパティ画面に、
「ErrorProvider1 の Error」という項目が出現することになります。
# 参考情報
# http://msdn2.microsoft.com/ja-jp/library/ms171835(VS.80).aspx
> 2."Text."と記述すると表示される IntelliSense の機能にもAutoSize
> が表示されませんが?
TextBox.AutoSize プロパティが、非表示のプロパティであるからです。
少し難しい言い方をすると、TextBoxBase.AutoSize プロパティには、
プロパティ画面に表示させないための「BrowsableAttribute(False)」属性と、
IntelliSense に表示させないための「EditorBrowsableAttribute(Never)」属性が
付与されている、という事になります。
魔界の仮面弁士 さん、ありがとうございます。
ところで、なぜそれほど2005.NETにお詳しいのですか。
日頃関心を持っているだけでとても、そんなに深く知識をモノに
出来るとは考えられませんが、これからも我々のような後から
マスターしようとしている者をサポートしてください。
よろしくお願いいたします。
ツイート | ![]() |