vbTabの数について

タグの編集
投稿者 ふく  (社会人) 投稿日時 2009/8/12 01:48:31
お世話になります。ふくと申します。
textboxなどで表示位置をそろえるために使用するvbTabを使用しています。
たとえば、現在の表示位置の間隔が半角8文字だとすると、
それを、半角4文字にすることは可能でしょうか。
また、vbTabの既定値を変更することは、可能でしょうか。
可能であれば、その方法をご教授いただければと思います。
よろしくお願いいたします。
以上です。
投稿者 魔界の仮面弁士  (社会人) 投稿日時 2009/8/12 02:12:58
RichTextBox でも良ければ、SelectionTabs プロパティで設定できます。
指定単位はピクセルです。

Dim s As String = "abc" & vbTab & "def" & vbTab & "GHQ" & vbCrLf _
                & "123" & vbTab & "456" & vbTab & "789"
RichTextBox1.Text = s
RichTextBox2.Text = s
RichTextBox2.SelectAll()
RichTextBox2.SelectionTabs = New Integer() {0, 80, 160, 240}
RichTextBox2.Select(0, 0)


の RichTextBox の場合は、SelTabCount / SelTabs プロパティです。
投稿者 流れ者  (社会人) 投稿日時 2009/8/12 02:21:43
こんばんわ。

バージョンが分からないので、予測でしかいえませんが、
vbTabに限らず、"vb~"の形式の変数は、VB自体が持っている定数だったと思います。
ですので、vbTabの値をコード内で変更するのは不可能だと思います。
魔界の仮面弁士さんが書いているように、vbTabを使用しない方法で作成した方が
良いと思います。
投稿者 (削除されました)  () 投稿日時 2009/8/12 02:29:55
(削除されました)
投稿者 魔界の仮面弁士  (社会人) 投稿日時 2009/8/12 02:59:35
なお、RichTextBox では都合が悪いのであれば、API を使う事で
TextBox のタブ位置を制御できます。(Multiline = True になっている場合のみ)

Public Class Form1
    Private Declare Auto Function SendMessage Lib "USER32" _
        (ByVal hWnd As IntPtr, _
         ByVal msg As Integer, _
         ByVal wParam As Integer, _
         ByVal lParam() As IntegerAs IntPtr

    '''<summary>複数行テキストボックスのタブストップ位置を設定する</summary> 
    '''<param name="Pos">指定なし=規定の設定値を使用。1個指定=一定間隔に配置、2個以上指定=指定した位置</param> 
    Public Shared Sub SetTabPos(ByVal TextBox As TextBoxBase, ByVal ParamArray Pos() As Integer)
        Const EM_SETTABSTOPS As Integer = &HCB
        If Pos Is Nothing Then ReDim Pos(-1)
        SendMessage(TextBox.Handle, EM_SETTABSTOPS, Pos.Length, Pos)
    End Sub

    Private Sub Form1_Load(ByVal sender As ObjectByVal e As EventArgs) Handles MyBase.Load
        'SetTabPos(TextBox2, 20, 40, 60) 
        SetTabPos(TextBox2, 20)
    End Sub

    Private Sub Button1_Click(ByVal sender As ObjectByVal e As EventArgs) Handles Button1.Click
        Dim s As String = "abc" & vbTab & "def" & vbTab & "GHQ" & vbCrLf _
                        & "123" & vbTab & "456" & vbTab & "789"
        TextBox1.Text = s
        TextBox2.Text = s
    End Sub
End Class
投稿者 ふく  (社会人) 投稿日時 2009/8/12 18:37:03
魔界の仮面弁士さん、流れ者さん、早々のご解答ありがとうございます。
RichTextboxでやりたいと思います。
本当にありがとうございました。
今後とも、よろしくお願いいたします。
取り急ぎ、お礼まで。
以上です。