回答編集履歴

4

関数における引数型の指定方法の修正

2022/10/26 14:11

投稿

Nor-Xor
Nor-Xor

スコア16

test CHANGED
@@ -26,9 +26,9 @@
26
26
  end sub
27
27
 
28
28
  ```
29
- としておくと、他のuserformで同様の設定をしたいときでも外部関数コールだけで成立します。~~
29
+ としておくと、他のuserformで同様の設定をしたいときでも外部関数コールだけで成立します。
30
- 惜しむくは、listview4自体がmsformsに標準実装されていないために、外部関数として独立させるときの引数として "lv as msforms.listview4"と設できないことで。~~
30
+ (ここから関数引数の型指に関る修正 20221026)
31
- 上記は誤りで“lv as MSComCtlLib.Listview“で参照設定を取ることができました。外部モジュールで選択したListItemの処理を渡したい場合も同様の方法をつかえます(2022/10/26追記)。
31
+ 前稿で『型指定ができないからAs Controlで書かなければならない』と書きましたが誤りで、ListViewを選択肢に加えた段階で“lv as MSComCtlLib.Listview“で参照設定を取ることができました。外部モジュールで選択したListItemの処理を渡したい場合も同様の方法をつかえます(修正ここまで)。
32
32
 
33
33
  listviewの数が一定以上増えて逐一コントロール名を使うのが面倒な場合は、
34
34
 

3

関数の引数指定に関する訂正

2022/10/26 14:05

投稿

Nor-Xor
Nor-Xor

スコア16

test CHANGED
@@ -1,7 +1,8 @@
1
1
  私ならlistviewの設定を関数として設定して、listviewを引数にしてコールする方法を採りますね。
2
2
 
3
+
3
4
  ```ここに言語を入力
4
- sub listviewinit (lv as Control)
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 Control
36
+ dim lvS() as MSComctlLib.Listview
35
37
  set lvs(0)=listview0:set lvs(1)=listview1
36
38
  :
37
39
  ```

2

補足追記) 配列を用いてコントロールをグループ化する手法について説明を追加しました。

2022/05/29 02:17

投稿

Nor-Xor
Nor-Xor

スコア16

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

追記)この方法のメリット・デメリットを追記しました。

2022/05/29 02:12

投稿

Nor-Xor
Nor-Xor

スコア16

test CHANGED
@@ -37,3 +37,13 @@
37
37
  ```
38
38
  と配列にセットしてfor~each文を用いる手法も採りえます。
39
39
  私はだいたい複数のユーザーフォームをその場で使い分けるようなことをしているため、標準モジュール側に命令群を組んでおいて、ユーザーフォーム側からはモジュールの関数を呼び出すだけということをよくやります。
40
+
41
+ 追記)
42
+ この方法のメリットとしては
43
+ ・ユーザーフォームをただの入れ物として使用することで複数のユーザーフォームの共通処理を分離できて共通処理の変更が容易になる
44
+ ・同じユーザーフォームでも挙動を端末ごとに変えたい場合、処理の異なる同一形式のフォームを準備するより簡単(バインドするモジュールを差し替えればいい)
45
+ デメリットとしては
46
+ ・ルーチンが入っている標準モジュールがないと全く役に立たない。
47
+ ・ルーチンが完全分離しているため、フォームにかかわるプログラム群の構造を把握していないと改良が難しい
48
+ というのがあります。
49
+ また、ユーザーフォームの初期設定は呼び出すプログラム側で設定する方法も採れますが、その場合でも上の考えは有効であると考えます。