質問編集履歴

13

ベストアンサー後

2019/03/08 01:45

投稿

kamikazelight
kamikazelight

スコア305

test CHANGED
File without changes
test CHANGED
@@ -1,63 +1,39 @@
1
1
  ### ベストアンサー後
2
2
 
3
+ 頂いたコードを参考に
4
+
3
- ~~欠点が見つかりました
5
+ 書き直してみました
6
+
7
+
8
+
4
-
9
+ 既存のインテリセンスに追加 したかったのですが
10
+
5
- インテリセンスに表示させたいクラスの定義スクリプトとして実行されこの方法ではインテリセンスに表示されせんでした。~~
11
+ `TabExpansion` では方法分からなかっため `TabExpansion2`を書き換えました。
6
-
7
- 一先ず出来たのですが、
12
+
8
-
13
+
14
+
9
- 定義した全てのクラス(Enum)が見たいときは `['まで打って Ctrl + Space で見られるようにしていたのに
15
+ 定義した全てのクラス(Enum)が見たいときは `['まで打って Ctrl + Space で見られます。
16
+
10
-
17
+ なぜか ISEのスクリプトウィンドウ内だと 表示されませんが
18
+
19
+ コンソールだと表示されます。
20
+
11
- 書き換えたら なくなりした
21
+ 一先ずここ妥協し
22
+
23
+
24
+
12
-
25
+ psm1 で保存し、ISEでの利用時には F8 等で 明示的に そのスクリプトを実行する必要があります。
26
+
13
-
27
+ ```powershell
28
+
29
+ 文字数超過で載せられませんでした
30
+
31
+ 下記記載の「インテリセンス 追加コード」へお願い致します。
32
+
33
+ ```
14
34
 
15
35
  [インテリセンス 追加コード](https://sites.google.com/view/kmkzyozora/Home/Program/PowerShell/ReuseScript/Ex_TabExpansion2_psm1)
16
36
 
17
- を全て選択して F8 で実行した場合は
18
-
19
- 表示されることが分かりました。
20
-
21
- スクリプトファイルとして実行された場合のみのようです...
22
-
23
- 現在 対策を探しています。
24
-
25
-
26
-
27
- 表示できるようにするためにはF8等を使いコマンドとして必要があります。。
28
-
29
-
30
-
31
- 頂いたコードを参考に
32
-
33
- 書き直してみました。
34
-
35
-
36
-
37
- 既存のインテリセンスに追加 したかったのですが
38
-
39
- `TabExpansion` では方法が分からなかったため `TabExpansion2`を書き換えました。
40
-
41
-
42
-
43
- 定義した全てのクラス(Enum)が見たいときは `['まで打って Ctrl + Space で見られま~~す。~~せん....
44
-
45
- 原因追求中です。
46
-
47
-
48
-
49
- ps1 か psm1 で保存し、ISEでの利用時には F8 等で 明示的に そのスクリプトを実行する必要があります。
50
-
51
- ```powershell
52
-
53
- 文字数超過で載せられませんでした
54
-
55
- 下記記載の「インテリセンス 追加コード」へお願い致します。
56
-
57
- ```
58
-
59
- [インテリセンス 追加コード](https://sites.google.com/view/kmkzyozora/Home/Program/PowerShell/ReuseScript/Ex_TabExpansion2_psm1)
60
-
61
37
 
62
38
 
63
39
 

12

ベストアンサー後

2019/03/08 01:45

投稿

kamikazelight
kamikazelight

スコア305

test CHANGED
File without changes
test CHANGED
@@ -10,6 +10,16 @@
10
10
 
11
11
  書き換えたら でなくなりました。
12
12
 
13
+
14
+
15
+ [インテリセンス 追加コード](https://sites.google.com/view/kmkzyozora/Home/Program/PowerShell/ReuseScript/Ex_TabExpansion2_psm1)
16
+
17
+ を全て選択して F8 で実行した場合は
18
+
19
+ 表示されることが分かりました。
20
+
21
+ スクリプトファイルとして実行された場合のみのようです...
22
+
13
23
  現在 対策を探しています。
14
24
 
15
25
 
@@ -30,7 +40,7 @@
30
40
 
31
41
 
32
42
 
33
- 定義した全てのクラス(Enum)が見たいときは `['まで打って Ctrl + Space で見られま~~す。~~ん....
43
+ 定義した全てのクラス(Enum)が見たいときは `['まで打って Ctrl + Space で見られま~~す。~~ん....
34
44
 
35
45
  原因追求中です。
36
46
 

11

ベストアンサー後

2019/03/08 01:28

投稿

kamikazelight
kamikazelight

スコア305

test CHANGED
File without changes
test CHANGED
@@ -1,15 +1,23 @@
1
1
  ### ベストアンサー後
2
2
 
3
- 欠点が見つかりました
3
+ ~~欠点が見つかりました
4
-
4
+
5
- インテリセンスに表示させたいクラスの定義がスクリプトとして実行されたこの方法ではインテリセンスに表示されませんでした。
5
+ インテリセンスに表示させたいクラスの定義がスクリプトとして実行されたこの方法ではインテリセンスに表示されませんでした。~~
6
+
6
-
7
+ 一先ず出来たのですが、
8
+
9
+ 定義した全てのクラス(Enum)が見たいときは `['まで打って Ctrl + Space で見られるようにしていたのに
10
+
7
- 表示でるようにするめにはF8等を使いコマンドとして必要がありま
11
+ 換えら でなくなりました
8
12
 
9
13
  現在 対策を探しています。
10
14
 
11
15
 
12
16
 
17
+ 表示できるようにするためにはF8等を使いコマンドとして必要があります。。
18
+
19
+
20
+
13
21
  頂いたコードを参考に
14
22
 
15
23
  書き直してみました。
@@ -22,7 +30,9 @@
22
30
 
23
31
 
24
32
 
25
- 定義した全てのクラス(Enum)が見たいときは `['まで打って Ctrl + Space で見られます。
33
+ 定義した全てのクラス(Enum)が見たいときは `['まで打って Ctrl + Space で見られま~~す。~~ぜん....
34
+
35
+ 原因追求中です。
26
36
 
27
37
 
28
38
 

10

ベストアンサー後

2019/03/08 01:21

投稿

kamikazelight
kamikazelight

スコア305

test CHANGED
File without changes
test CHANGED
@@ -28,19 +28,15 @@
28
28
 
29
29
  ps1 か psm1 で保存し、ISEでの利用時には F8 等で 明示的に そのスクリプトを実行する必要があります。
30
30
 
31
-
32
-
33
- スクリプトで実行すると一部コレクションが読み取り専用になり
34
-
35
- 動作不良を起こすことが分かったので修正中です。
36
-
37
- ```powershell
31
+ ```powershell
32
+
38
-
33
+ 文字数超過で載せられませんでした
34
+
39
-
35
+ 下記記載の「インテリセンス 追加コード」へお願い致します。
40
-
36
+
41
- ```
37
+ ```
38
+
42
-
39
+ [インテリセンス 追加コード](https://sites.google.com/view/kmkzyozora/Home/Program/PowerShell/ReuseScript/Ex_TabExpansion2_psm1)
43
-
44
40
 
45
41
 
46
42
 

9

ベストアンサー後

2019/03/08 00:41

投稿

kamikazelight
kamikazelight

スコア305

test CHANGED
File without changes
test CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  欠点が見つかりました
4
4
 
5
- クラスの定義がスクリプトとして実行されたこの方法ではインテリセンスに表示されませんでした。
5
+ インテリセンスに表示させたいクラスの定義がスクリプトとして実行されたこの方法ではインテリセンスに表示されませんでした。
6
6
 
7
7
  表示できるようにするためにはF8等を使いコマンドとして必要があります。
8
8
 
@@ -36,6 +36,8 @@
36
36
 
37
37
  ```powershell
38
38
 
39
+
40
+
39
41
  ```
40
42
 
41
43
 

8

ベストアンサー後

2019/03/07 10:43

投稿

kamikazelight
kamikazelight

スコア305

test CHANGED
File without changes
test CHANGED
@@ -1,8 +1,46 @@
1
1
  ### ベストアンサー後
2
2
 
3
+ 欠点が見つかりました
4
+
5
+ クラスの定義がスクリプトとして実行されたこの方法ではインテリセンスに表示されませんでした。
6
+
7
+ 表示できるようにするためにはF8等を使いコマンドとして必要があります。
8
+
9
+ 現在 対策を探しています。
10
+
11
+
12
+
3
13
  頂いたコードを参考に
4
14
 
15
+ 書き直してみました。
16
+
17
+
18
+
19
+ 既存のインテリセンスに追加 したかったのですが
20
+
21
+ `TabExpansion` では方法が分からなかったため `TabExpansion2`を書き換えました。
22
+
23
+
24
+
25
+ 定義した全てのクラス(Enum)が見たいときは `['まで打って Ctrl + Space で見られます。
26
+
27
+
28
+
29
+ ps1 か psm1 で保存し、ISEでの利用時には F8 等で 明示的に そのスクリプトを実行する必要があります。
30
+
31
+
32
+
33
+ スクリプトで実行すると一部コレクションが読み取り専用になり
34
+
5
- なりにまとめら載せます。
35
+ 動作不良を起こすことがかっので修正中です。
36
+
37
+ ```powershell
38
+
39
+ ```
40
+
41
+
42
+
43
+
6
44
 
7
45
 
8
46
 

7

ベストアンサー後

2019/03/07 10:41

投稿

kamikazelight
kamikazelight

スコア305

test CHANGED
File without changes
test CHANGED
@@ -1,4 +1,12 @@
1
- ### 途中経過
1
+ ### ベストアンサー後
2
+
3
+ 頂いたコードを参考に
4
+
5
+ 自分なりにまとめたら載せます。
6
+
7
+
8
+
9
+ ### 途中経過 2019.03.06時点
2
10
 
3
11
  一先ずpublicなクラスを継承して
4
12
 

6

補足情報の修正

2019/03/07 02:20

投稿

kamikazelight
kamikazelight

スコア305

test CHANGED
File without changes
test CHANGED
@@ -240,7 +240,7 @@
240
240
 
241
241
  Win10
242
242
 
243
- powerShell Ver V5
243
+ powerShell_ISE Ver V5
244
244
 
245
245
 
246
246
 

5

追記の訂正

2019/03/06 05:47

投稿

kamikazelight
kamikazelight

スコア305

test CHANGED
File without changes
test CHANGED
@@ -2,12 +2,14 @@
2
2
 
3
3
  一先ずpublicなクラスを継承して
4
4
 
5
- NameSpace なのかよくわかりせんが
5
+ NameSpace を利用する 手段は見つけした。
6
-
6
+
7
- クラスをカンマ区切りで指定できる手段は見つけました。
7
+ 一度実行すればタイプ指定時のインテリセンスも使えました。
8
8
 
9
9
  ```powershell
10
10
 
11
+ Using Module .\class.psm1
12
+
11
13
  [System.Reflection.AssemblyName] $AssemblyName = "assemblyBuilder"
12
14
 
13
15
 
@@ -26,31 +28,49 @@
26
28
 
27
29
 
28
30
 
29
- $TypeBuilder = $moduleBuilder.DefineType("kmkz.Form",[System.Reflection.TypeAttributes]::Public,[System.Windows.Forms.Form])
31
+ $TypeBuilder = $moduleBuilder.DefineType("kmkz.Form", [System.Reflection.TypeAttributes]::Public, [System.Windows.Forms.Form])
30
32
 
31
33
 
32
34
 
33
35
  $TypeBuilder.CreateType() > $null
34
36
 
37
+
38
+
39
+ $TypeBuilder.Assembly.GetTypes().NameSpace | sort -Unique | foreach { Write-Host "ネームスペース : $_" }
40
+
41
+ Write-Host "フルネーム : $($Form.GetType().FullName)"
42
+
43
+
44
+
35
45
  $Form = [kmkz.Form]::new()
36
46
 
37
-
38
-
39
- Write-Host "$($Form.GetType().FullName)"
40
-
41
-
42
-
43
- $Form.ShowDialog()
47
+ $Form.ShowDialog() > $null
44
-
48
+
49
+
50
+
45
- ```
51
+ ```
46
-
52
+
47
- ですがメソッド等の追加の仕方も分からないですし...
53
+ ですがメソッド等の追加の仕方も分からないですし...
48
-
54
+
49
- 自分で作ったクラスも継承できませんし.....
55
+ 自分で作ったクラスも継承できません
56
+
50
-
57
+ `[System.Reflection.TypeAttributes]::Public, [System.Windows.Forms.Form])`の`[System.Windows.Forms.Form]`を自分で定義したクラスにすると
58
+
59
+
60
+
61
+ ```
62
+
63
+ "3" 個の引数を指定して "DefineType" を呼び出し中に例外が発生しました: "回収不可能アセンブリから回収可能アセンブリを参照することはできません。"
64
+
65
+ ```
66
+
67
+ っとエラーになります.....
68
+
51
- しできれば普通にクラスを書いた後にも変更ず継承させて
69
+ **回収不可能アセンブリ** **回収可能アセンブリ** も調べてものことだか全くわかりまん。
52
-
70
+
71
+
72
+
53
- 無理やりインテリセンを使えようにしてしまおうかと思ったのですが...
73
+ もし自作のクラが継承できればそれで 一先ず目標は達成できるのですが...
54
74
 
55
75
 
56
76
 
@@ -60,8 +80,6 @@
60
80
 
61
81
 
62
82
 
63
-
64
-
65
83
  ### 前提・実現したいこと
66
84
 
67
85
 

4

間違い修正

2019/03/06 05:45

投稿

kamikazelight
kamikazelight

スコア305

test CHANGED
File without changes
test CHANGED
@@ -34,9 +34,9 @@
34
34
 
35
35
  $Form = [kmkz.Form]::new()
36
36
 
37
- $Form.GetType().FullName
37
+
38
-
38
+
39
- Write-Host "$($test.ToString())"
39
+ Write-Host "$($Form.GetType().FullName)"
40
40
 
41
41
 
42
42
 

3

途中経過

2019/03/06 04:05

投稿

kamikazelight
kamikazelight

スコア305

test CHANGED
File without changes
test CHANGED
@@ -1,3 +1,67 @@
1
+ ### 途中経過
2
+
3
+ 一先ずpublicなクラスを継承して
4
+
5
+ NameSpace ? なのかよくわかりませんが
6
+
7
+ クラスをカンマ区切りで指定できる手段は見つけました。
8
+
9
+ ```powershell
10
+
11
+ [System.Reflection.AssemblyName] $AssemblyName = "assemblyBuilder"
12
+
13
+
14
+
15
+ $appDomain = [AppDomain]::CurrentDomain
16
+
17
+ $assemblyBuilder = $appDomain.DefineDynamicAssembly(
18
+
19
+ $AssemblyName,
20
+
21
+ [System.Reflection.Emit.AssemblyBuilderAccess]::Run
22
+
23
+ )
24
+
25
+ $moduleBuilder = $assemblyBuilder.DefineDynamicModule($AssemblyName.Name)
26
+
27
+
28
+
29
+ $TypeBuilder = $moduleBuilder.DefineType("kmkz.Form",[System.Reflection.TypeAttributes]::Public,[System.Windows.Forms.Form])
30
+
31
+
32
+
33
+ $TypeBuilder.CreateType() > $null
34
+
35
+ $Form = [kmkz.Form]::new()
36
+
37
+ $Form.GetType().FullName
38
+
39
+ Write-Host "$($test.ToString())"
40
+
41
+
42
+
43
+ $Form.ShowDialog()
44
+
45
+ ```
46
+
47
+ ですがメソッド等のの追加の仕方も分からないですし...
48
+
49
+ 自分で作ったクラスも継承できませんし.....
50
+
51
+ もしできれば普通にクラスを書いた後に何も変更せず継承させて
52
+
53
+ 無理やりインテリセンスを使えるようにしてしまおうかと思ったのですが...
54
+
55
+
56
+
57
+ そもそも ダイナミックモジュールじゃなくて普通のモジュールでは出来ないのでしょうか....?
58
+
59
+
60
+
61
+
62
+
63
+
64
+
1
65
  ### 前提・実現したいこと
2
66
 
3
67
 
@@ -90,8 +154,6 @@
90
154
 
91
155
  $test = [te2st]::new()
92
156
 
93
- $test.ToString()
94
-
95
157
  ```
96
158
 
97
159
  結果は良好 staticメンバ も instanceメンバ もしっかりインテリセンスが使えました。

2

経緯の追記

2019/03/05 08:59

投稿

kamikazelight
kamikazelight

スコア305

test CHANGED
File without changes
test CHANGED
@@ -26,7 +26,9 @@
26
26
 
27
27
  そんな中 [とある質問](https://teratail.com/questions/172043)での**Zuishin様**からの回答をきっかけに クラスの継承を 使うようになりました。
28
28
 
29
+ ですが、自分で定義したクラスをさらに継承(多重継承?)しようとした場合
30
+
29
- ですが 今まで使っていた 変数に格納したクラスでは 継承が出来ず 再びインテリセンスが使えない状態に陥ってしまいました。
31
+ 今まで使っていた 変数に格納したクラスでは 継承が出来ず 再びインテリセンスが使えない状態に陥ってしまいました。
30
32
 
31
33
  「どうせインテリセンスが使えないのなら全て諦めてしまおうと」そう思ったのですが、
32
34
 

1

補足

2019/03/02 02:37

投稿

kamikazelight
kamikazelight

スコア305

test CHANGED
File without changes
test CHANGED
@@ -159,3 +159,11 @@
159
159
  Win10
160
160
 
161
161
  powerShell Ver V5
162
+
163
+
164
+
165
+ どのパソコンで作業、実行 するのか決まっていないのと
166
+
167
+ 毎回全てのクラスを使うわけではない(一つのプロジェクトのみでしか利用しないのもある)ので
168
+
169
+ プロファイル等 設定済みPCでしか利用できない方法は使えません。