忍者ブログ
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

文字列を区切る関数
"¥"などでも区切れるのでツリービューにも使えそうです。

使用例)

Dim strDate As String
Dim strSpt() As String
Dim i As Integer

strDate = "2007-06-25"
strSpt = Split(strDate, "-") '←文字列と区切記号が引数

For i = 0 To UBound(strSpt)
    MsgBox strSpt(i)
Next i

Erase strSpt()  '←とりあえず今回はもういらないので破棄

この場合は
    'strSpt(0) 2007
    'strSpt(1)  06
    'strSpt(2)  25
'が配列に保存されている
PR
●Modal
[OK] ボタンまたは [キャンセル] ボタンによってそのウィンドウを閉じるまで、ユーザーはほかのウィンドウに切り替えることができない。
●Modeless
ほかのウィンドウに切り替えるときに、[OK] または [キャンセル] ボタンによって閉じる必要がない。

●フォームからタイトルバーを消す場合
MaxButton:最大化ボタン…False
MiniButton:最小化ボタン…False
Caption…なし

●タイトルバー非表示でフォームをドラッグする方法
1.WindowsAPIを使う
参考:www.microsoft.com/japan/msdn/vbasic/migration/tips/Movement/


Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" ( _
ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long

Private Declare Sub ReleaseCapture Lib "user32.dll" ()

Private Const WM_NCLBUTTONDOWN = &HA1
Private Const HTCAPTION = 2

Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
If Button And vbLeftButton Then
ReleaseCapture
Call SendMessage(Form1.hwnd, WM_NCLBUTTONDOWN, HTCAPTION, 0&)
End If
End Sub

※Form1は動かすフォームの名前

2.APIを使わない方法
参考:homepage1.nifty.com/kurichan/html/tips42.htm


Public intTmpX As Integer
Public intTmpY As Integer

Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
    'マウスの左ボタンが押下されたフォーム上のX座標、Y座標を変数に保存
    If Button = vbLeftButton Then
        intTmpX = X
        intTmpY = Y
    End If
End Sub

Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
    'マウスの移動量をフォームの Top プロパティ、Left プロパティ に加算
    If Button = vbLeftButton Then
        Form1.Left = Form1.Left + X - intTmpX
        Form1.Top = Form1.Top + Y - intTmpY
     End If
End Sub

●Formを常に最前面にする
参考:
jeanne.wankuma.com/tips/form/topmost.html
homepage1.nifty.com/rucio/main/Samples/Sample063TopMost.htm

' SetWindowPos 関数
Private Declare Function SetWindowPos Lib "USER32.DLL" ( _
    ByVal hWnd            As Long, _
    ByVal hWndInsertAfter As Long, _
    ByVal x               As Long, _
    ByVal y               As Long, _
    ByVal cx              As Long, _
    ByVal cy              As Long, _
    ByVal wFlags          As Long  _
) As Long

' 定数の定義
Private Const HWND_TOPMOST   As Long = -1     ' 最全面に表示する
Private Const HWND_NOTOPMOST As Long = -2     ' 最前面に表示するのをやめる
Private Const SWP_NOSIZE     As Long = &H1    ' サイズを変更しない
Private Const SWP_NOMOVE     As Long = &H2    ' 位置を変更しない

' このフォームを常に最前面に表示する (サイズと位置は変更しない)
Call SetWindowPos(Me.hWnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE Or SWP_NOMOVE)

' 解除したい場合
Call SetWindowPos(Me.hWnd, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOSIZE Or SWP_NOMOVE)
参考:
x7net.com/~access/AcTipsFrmUsingTreeView1.html
x7net.com/~access/AcTipsFrmUsingTreeView2.html
www.naka-net.com/y-mac/45.html
www.philly.ne.jp/~hanya/vb/treeview.htm

●TreeViewの設定

Option Explicit
'ImageListのKey
Private Const cstrCatImgClose As String = "CATOPEN"
Private Const cstrCatImgClose As String = "CATCLOSE"

Private Sub TreeViewLoad()
    Dim nodNode As Node

    'ツリービューにイメージリストをセットする
    'イメージリストはフォームのコントロールを用意しておいて
    'あらかじめプロパティからイメージを追加・Keyの設定をしておく

    trvTest.ImageList = ImageList1

    'ツリービューを表示する
    'ツリー1段階目

    Set nodNode = trvTest.Nodes.Add(, , "Yea", "Rot")
    nodNode.Image = cstrCatImgClose
    'ツリー2段階目
    Set nodNode = trvTest.Nodes.Add("Yea", tvwChild, "Mon", "Mon")
    nodNode.Image = cstrCatImgClose
    'ツリー3段階目
    Set nodNode = trvTest.Nodes.Add("Mon", tvwChild, "Day", "Day")

End Sub


●ツリービューの展開にあわせてアイコンを変更する
①イベントハンドラで設定する方法

Private Sub trvTest_Collapse(ByVal Node As MSComctlLib.Node)
    Node.Image = cstrCatImgClose
End Sub

Private Sub trvTest_Expand(ByVal Node As MSComctlLib.Node)
    Node.Image = cstrCatImgOpen
End Sub



②ツリービュー作成時に一緒に記述する方法
    Set nodNode = trvTest.Nodes.Add(, , "Yea", "Rot",cstrCatImgClose)
    nodNode.ExpandedImage = cstrCatImgOpen


●"Day"を含むKeyが選択されたときだけラベルに表示してみる

Private Sub trvTest_NodeClick(ByVal Node As MSComctlLib.Node)
    Dim strKey As String
   
    strKey = Node.Key
    If Not strKey = "Yea" Then
        If Not strKey = "Mon" Then
            lblDay.Caption = Node.Text
        Else
            lblDay.Caption = ""
        End If
    End If
End Sub


cmdA.Enabled=True…有効
cmdA.Enabled=False…無効

参考
homepage2.nifty.com/sak/w_sak3/doc/sysbrd/vb_v04.htm
□List関係の違い
    ListBox…一行&ひとつの項目のみ表示できる
    ListView…item&Subitem(1)&Subitem(2)…で一行に複数の項目が表示できる
    ※Viewプロパティが 3-lvwReport の時のみ
    ※itemがコレクションで、subitemという同じクラスのものをまとめているような感じ

□プロパティあれこれ
    View…リスト表示方法が変えれる
    FullRowSelect…一行まるごと選択したように強調表示ができる
    LabelEdit… 1-lvwManualで、ListView上で直接編集できなくさせられる

参考
itpro.nikkeibp.co.jp/article/COLUMN/20060720/243917/
officetanaka.net/excel/vba/listview/06.htm
dobon.net/vb/bbs/log3-9/4884.html

ListView
一行に対して複数の項目を表示したい
行がItemで、それぞれのカラムはSubItem
View…Detail 
キーとなるいくつかの項目をListViewで一覧表示。
ListViewの一行を選択したら、
その行の編集可能な項目をtextボックス等で表示、
編集不可項目はlabelで表示。

DataGrid
一覧表示上で直接編集したい
編集した行としてない行の区別が難しい


例)
http://dobon.net/vb/bbs/log3-9/4884.html参考です
自分memo用に少し変えさせてもらってます。
'ヘッダ設定
with ListView1
'カラムの追加
.Columns.Clear() '一応、クリアしておく
.Columns.Add("会社コード", 200, HorizontalAlignment.Left)
.Columns.Add("会社名", 400, HorizontalAlignment.Left)
.Columns.Add("住所", 1000, HorizontalAlignment.Left)
end with

'データ取得
(この部分は省略します)

'データ貼り付け
With ListView1
.BeginUpdate() 'ちらつきを抑えるために、BeginUpdate()を呼ぶ。
.Items.Clear() 'ListViewItems をクリアする。
For i As Integer = 0 To <データ数 - 1>
'リストに格納
Dim items As New ListViewItem(<会社コードのデータ>)
items.SubItems.Add(<会社名のデータ>)
items.SubItems.Add(<住所のデータ>)
'ビューに描画
.Items.AddRange(New ListViewItem() {items})
Next
.EndUpdate() 'EndUpdate() で表示を再開する。
 
カレンダー
05 2025/06 07
S M T W T F S
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
OTHERS
Powered by 忍者ブログ
Templated by TABLE ENOCH