□技術メモ - VB.NET(2) ※管理人の個人的な技術メモです。このページの内容を実行した結果について 管理人はいかなる責任も負いかねますのでご自身の責任でお試しください。 ----------------------------------------------------------- 〇コントロール配列を動的に生成する ・Formに Label0 , Button1 を配置して、以下のソースを張り付ける。 ・Button1_Click で、Ctrl配列にアクセスできることを確認します。 ・Label0_Click で、イベントハンドラーが正しく動作していることを確認します。 -------- Public Class Form1 Public lblDsp() As Label Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load Dim i As Integer = 0 ReDim lblDsp(4) For i = 0 To 4 lblDsp(i) = New Label Me.Controls.Add(lblDsp(i)) lblDsp(i).AutoSize = False lblDsp(i).Name = "lblDsp" & CStr(i) lblDsp(i).Text = "lblDsp" & CStr(i) lblDsp(i).Location = New Point(i * 100, i * 100) lblDsp(i).Size = New Size(100, 100) lblDsp(i).Visible = True AddHandler lblDsp(i).Click, AddressOf Label1_Click Next Me.Controls.Remove(Label1) Me.Label1.Dispose() End Sub Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click Dim i As Integer = 0 For i = 0 To 4 lblDsp(i).BackColor = Color.Red Next End Sub Private Sub Label1_Click(sender As Object, e As EventArgs) Handles Label1.Click Dim str As String = sender.ToString Debug.Print(str) Dim iIndex As Integer = Array.IndexOf(lblDsp, sender) Debug.Print(iIndex) End Sub End Class -------- 〇スクロールバーの表示判定 ・縦スクロールバー、横スクロールバーを、フォームのリザイズに合わせて、  動的に表示、非表示設定しないといけないことがあります。 ・縦スクロールバー、横スクロールバーを表示する判定基準を考察しました。 +-------------+-----+-----+ | | | | | | | | | (1) | (2) | (3) | +-------------+-----+-----+ | (4) | (5) | (6) | +-------------+-----+-----+ | (7) | (8) | (9) | +-------------+-----+-----+ ・縦スクロールバーの表示領域は(2)、横スクロールバーの表示領域は(4) ・したがって、(2)の横幅は、縦スクロールバーの横幅、(4)の縦幅は、横スクロールバーの縦幅となります。 ・(5)の右下が、Formの右下になります。 ・縦Bar, 横Barの表示判定は以下の通り。 もし、コンテンツの右下座標が、(5)の右下座標より左上にある場合( (1)(2)(4)(5)にある場合 )   コンテンツはFormの中に収まっているので、縦Bar, 横Barいずれも表示なし。 上記以外の場合   A. コンテンツの右下座標が(5)の左上座標より右上にある場合( (3)にある場合 )     横Barを表示   B. コンテンツの右下座標が(5)の左上座標より左下にある場合( (7)にある場合 )     縦Barを表示   C. コンテンツの右下座標が(5)の左上座標より右下にある場合( (6)(8)(9)にある場合 )     縦Bar, 横Bar を表示 -------- 〇C1FlexGridについて ・VB6のVsFlexGridからVb.netに移行する場合には、グループシティのC1FlexGridが推奨されている。 C1FlexGridClassic が VsFlexGrid と同じインターフェイスらしいが、サポート対象外なので Vb.NetでVsFlexGridの動作確認程度に使う程度と考えた方がよい。 イベントの発生順が同じかどうかは私自身は未確認。 -------- 〇C1FlexGridによるTextAlign設定 ・TextAlign、いわゆる文字列の右揃え、左揃えなどは、CellStyleで設定する。 ・CellStyleの設定は、設定対象により優先順位がある。動作確認すると優先度は以下のようになっている。 rowに対する設定 < colに対する設定 < CellRangeのstyleNewによる設定 < SetCellStyleによる設定 -------- 〇C1FlexGridのCellRangeの結合について ・CellRangeは条件により領域が結合することがある。自動マージやカスタムマージはリファレンスに記載があるが、 そのような指定をしなくても結合することがある。これが仕様なのか、バグなのかは未確認なのだが、 動作確認した結果を以下に記す。 +------+------+------+------+------+------+------+ | (00) | (01) | (02) | (03) | (04) | (05) | (06) | +------+------+------+------+------+------+------+ | (10) | (11) | (12) | (13) | (14) | (15) | (16) | +------+------+------+------+------+------+------+ | (20) | (21) | (22) | (23) | (24) | (25) | (26) | +------+------+------+------+------+------+------+ | (30) | (31) | (32) | (33) | (34) | (35) | (36) | +------+------+------+------+------+------+------+ | (40) | (41) | (42) | (43) | (44) | (45) | (46) | +------+------+------+------+------+------+------+ | (50) | (51) | (52) | (53) | (54) | (55) | (56) | +------+------+------+------+------+------+------+ | (60) | (61) | (62) | (63) | (64) | (65) | (66) | +------+------+------+------+------+------+------+ ※準備中 -------- 〇C1FlexGrid SetCellStyleによるスタイルの設定 ・メンバ変数に以下を追加 public gcs as C1.Win.C1FlexGrid.CellStyle ・Form_Loadに以下を追加 gcs = flx.Styles.Add("StyleA") gcs.TextAlign = TextAlignEnum.LeftTop ''左上揃え gcs.Font = New Font(Font, FontStyle.Italic) gcs.BackColor = Color.Yellow ・任意のイベントに以下を追加 Dim cs As C1.Win.C1FlexGrid.CellStyle cs = flex.Styles("StyleA") flx.SetCellStyle(row, col, cs) --------