各種コントロールの高さを合せるには?

解決


モンタ  2007-09-04 19:24:13  No: 143877

WindowsXP VB.NetEEを使っています。
フォームに各種のコントロールを配置すると以下のように高さがComboBox
だけが違いExcel表のように並べて配置できません。Size_Heightプロパティ
を規定値から変更するにはどうすればいいのでしょうか。

             Size_Height
TextBox        19 P
MaskedTextBox  19 P
DataTimePicker 19 P
ComboBox       20 P


魔界の仮面弁士  2007-09-04 20:25:27  No: 143878

> 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


モンタ  2007-09-04 20:51:25  No: 143879

魔界の仮面弁士さん、早速ありがとうございました。
Visual Basic 2005 Express Edition のことです。すみません。

ComboBoxのSize_Heightを1ピクセル低く設定するのにこれほどコートを
記述する必要あるのですか。初心者には難しそうですね。とりあえず
TextBoxだけはMultlineをTrueに設定してSize_Heightを20ピクセルに
して使います。
DataTimePickerはフォントサイズを10に設定すると20ピクセルに変
わりました。今後のために、ご指導いただいたコードを試験して見ます。

ありがとうございました。


魔界の仮面弁士  2007-09-04 21:24:18  No: 143880

そもそも、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


モンタ  2007-09-05 00:02:12  No: 143881

魔界の仮面弁士さん、親切な指導ありがとうございます。

Size_HeightプロパティはTextBoxのSizeプロパティを展開したときに表示
されるHeightプロパティの意味で記述下のですが表現がまづいですか?

ご指導いただいた以下のコードを早速テストして正常に動作しました。
TextBox1.AutoSize = False
TextBox1.Height = 30

お恥ずかしい話ですが、新米で次のことがよく理解できません。
1.VB 2005 Express Edition のプロパティ画面以外にもプロパティが
    あるのですか
2."Text."と記述すると表示される IntelliSense の機能にもAutoSize
    が表示されませんが?

もしヒントでもいただければ幸いです。よろしくお願いいたします。


魔界の仮面弁士  2007-09-05 00:56:30  No: 143882

> 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)」属性が
付与されている、という事になります。


モンタ  2007-09-05 06:05:12  No: 143883

魔界の仮面弁士 さん、ありがとうございます。

ところで、なぜそれほど2005.NETにお詳しいのですか。
日頃関心を持っているだけでとても、そんなに深く知識をモノに
出来るとは考えられませんが、これからも我々のような後から
マスターしようとしている者をサポートしてください。
よろしくお願いいたします。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加