回答編集履歴
4
関数における引数型の指定方法の修正
test
CHANGED
@@ -26,9 +26,9 @@
|
|
26
26
|
end sub
|
27
27
|
|
28
28
|
```
|
29
|
-
としておくと、他のuserformで同様の設定をしたいときでも外部関数コールだけで成立します。
|
29
|
+
としておくと、他のuserformで同様の設定をしたいときでも外部関数コールだけで成立します。
|
30
|
-
|
30
|
+
(ここから関数内引数の型指定に関する修正 20221026)
|
31
|
-
|
31
|
+
前稿で『型指定ができないからAs Controlで書かなければならない』と書きましたが誤りで、ListViewを選択肢に加えた段階で“lv as MSComCtlLib.Listview“で参照設定を取ることができました。外部モジュールで選択したListItemの処理を渡したい場合も同様の方法をつかえます(修正ここまで)。
|
32
32
|
|
33
33
|
listviewの数が一定以上増えて逐一コントロール名を使うのが面倒な場合は、
|
34
34
|
|
3
関数の引数指定に関する訂正
test
CHANGED
@@ -1,7 +1,8 @@
|
|
1
1
|
私ならlistviewの設定を関数として設定して、listviewを引数にしてコールする方法を採りますね。
|
2
2
|
|
3
|
+
|
3
4
|
```ここに言語を入力
|
4
|
-
sub listviewinit (lv as Co
|
5
|
+
sub listviewinit (lv as MSComctlLib.Listview)
|
5
6
|
with lv
|
6
7
|
.View = lvwReport ''表示
|
7
8
|
.LabelEdit = lvwManual ''ラベルの編集
|
@@ -25,13 +26,14 @@
|
|
25
26
|
end sub
|
26
27
|
|
27
28
|
```
|
28
|
-
としておくと、他のuserformで同様の設定をしたいときでも外部関数コールだけで成立します。
|
29
|
+
としておくと、他のuserformで同様の設定をしたいときでも外部関数コールだけで成立します。~~
|
29
|
-
惜しむらくは、listview4自体がmsformsに標準実装されていないために、外部関数として独立させるときの引数として "lv as msforms.listview4"と設定できないことです。
|
30
|
+
惜しむらくは、listview4自体がmsformsに標準実装されていないために、外部関数として独立させるときの引数として "lv as msforms.listview4"と設定できないことです。~~
|
31
|
+
上記は誤りで“lv as MSComCtlLib.Listview“で参照設定を取ることができました。外部モジュールで選択したListItemの処理を渡したい場合も同様の方法をつかえます(2022/10/26追記)。
|
30
32
|
|
31
33
|
listviewの数が一定以上増えて逐一コントロール名を使うのが面倒な場合は、
|
32
34
|
|
33
35
|
```ここに言語を入力
|
34
|
-
dim lvS() as Co
|
36
|
+
dim lvS() as MSComctlLib.Listview
|
35
37
|
set lvs(0)=listview0:set lvs(1)=listview1
|
36
38
|
:
|
37
39
|
```
|
2
補足追記) 配列を用いてコントロールをグループ化する手法について説明を追加しました。
test
CHANGED
@@ -36,6 +36,8 @@
|
|
36
36
|
:
|
37
37
|
```
|
38
38
|
と配列にセットしてfor~each文を用いる手法も採りえます。
|
39
|
+
補足)listviewに限りませんが、特定の共通処理を持つコントロールを配列にセットしておくことで、有効無効だったり表示非表示だったりを命令文一個で表記することもできます(もちろん処理は外部ルーチンを作ることになりますが、「ここからここまでのボタンは無効」とか「すべてのlistviewのColumnheader以外の情報を消去する」とかは配列を用いたほうが圧倒的に処理がわかりやすいです。
|
40
|
+
|
39
41
|
私はだいたい複数のユーザーフォームをその場で使い分けるようなことをしているため、標準モジュール側に命令群を組んでおいて、ユーザーフォーム側からはモジュールの関数を呼び出すだけということをよくやります。
|
40
42
|
|
41
43
|
追記)
|
1
追記)この方法のメリット・デメリットを追記しました。
test
CHANGED
@@ -37,3 +37,13 @@
|
|
37
37
|
```
|
38
38
|
と配列にセットしてfor~each文を用いる手法も採りえます。
|
39
39
|
私はだいたい複数のユーザーフォームをその場で使い分けるようなことをしているため、標準モジュール側に命令群を組んでおいて、ユーザーフォーム側からはモジュールの関数を呼び出すだけということをよくやります。
|
40
|
+
|
41
|
+
追記)
|
42
|
+
この方法のメリットとしては
|
43
|
+
・ユーザーフォームをただの入れ物として使用することで複数のユーザーフォームの共通処理を分離できて共通処理の変更が容易になる
|
44
|
+
・同じユーザーフォームでも挙動を端末ごとに変えたい場合、処理の異なる同一形式のフォームを準備するより簡単(バインドするモジュールを差し替えればいい)
|
45
|
+
デメリットとしては
|
46
|
+
・ルーチンが入っている標準モジュールがないと全く役に立たない。
|
47
|
+
・ルーチンが完全分離しているため、フォームにかかわるプログラム群の構造を把握していないと改良が難しい
|
48
|
+
というのがあります。
|
49
|
+
また、ユーザーフォームの初期設定は呼び出すプログラム側で設定する方法も採れますが、その場合でも上の考えは有効であると考えます。
|