VB的に覚える TypeScript その2 〜 Visual Studio 2015

  • 2017.03.09 Thursday
  • 22:47

 

さて、長い前置きも終わりTypeScriptでゴリゴリソースを書いていくことに、

 

VB的に覚えるということで、

Visual Basicと並行に見ていくことにする。

 

 

■コントロールの追加

HTMLのデザインビュー上にVBのフォームアプリのように

ドラッグ&ドロップでコントロールを追加

 

 

とりあえず、Input(Button) [Button]を適当に配置しておく

[]内はVBのコントロール名

 

 

 

■ボタンイベント(VB)の追加

配置したら、ボタンにイベントを入れてみるのだが、

VBでは、ボタンイベントをダブルクリックすれば

 

   1:  Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
   2:   
   3:  End Sub

 

とClickイベントが自動的に生成されるが、

HTMLのデザイナーでボタンをダブルクリックしても生成されることはない

 

この辺は手動でゴリゴリ書く必要がある。

 

いよいよTypeScriptで書いていくことになる

kyukyukyu

 

でも、テーマであるVB的に考えると意外に書ける(かもしれない?)

 

 

ちなみに、TypeScriptはなんて言うのか、

 VBA(or VBS) +C#というイメージ(C#版のVBS?)

という感じが近いかもしれない。

 

VB.netみたいに高機能ではなく、

VBAやVBSのようにちょこっとスクリプトを書く感覚で、

言語がC#ライクになったという感じである。

 

まぁゴタゴタ書いていないで、話を進める。

 

■フォームロード

まずは、VBのフォームアプリの場合、

起動時の処理は、

 

   1:  Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
   2:   
   3:  End Sub

 

とLoadイベント(にハンドルされたsub関数(プロシージャ))が最初に読み込まれる。

 

では、TypeScriptを使用したHTMLアプリケーション プロジェクトの方ではというと

app.ts内に書かれている

 

   1:  window.onload = () => {
   2:   
   3:  };

 

がその部分と同じと考えて良い

 

■再びボタンイベント(TypeScript)の追加

今回はここに、ボタンのクリックイベントを追加してみる。

 

VBの場合で考えてみると、

あるsub関数(Button1_Clickとする)をClickイベントに結合(ハンドル)する場合は、

AddHandlerを使えば良いので、Load時に

 

   1:  AddHandler Me.Button1.Click, AddressOf Button1_Click

 

と書くことでダブルクリックして生成されたのと同じように、

クリックすると、Button1_Click関数が呼び出されるようになる。

 

ではTypeScriptでクリックイベントを追加してみる

 

   1:  var fmBtn: HTMLButtonElement = <HTMLButtonElement>document.getElementById("Button1");
   2:   
   3:  fmBtn.onclick = () => {
   4:      alert("イベント");
   5:  };

 

こんな感じになる。

 

ちょっとイベントを追加する前に、HTML(document)からボタンを取得して

取得した変数にイベントを入れてあげるという手順が必要になる。

 

VBでも、表面には出てこない、Form.Designer.vbのInitializeComponentメソッド内で

Buttonが宣言されているので、同じ感じである。

TSは自分でゴリゴリ書かないと行けないので、

ちょっと手順が必要になっていると思えば良い、

 

VBでも同じように書いてみると、

 

   1:  Dim fmBtn As Button = Me.Button1 'New Button
   2:  AddHandler fmBtn.Click, AddressOf Button1_Click

 

こんな風にになるでしょうか

 

このコードで比較しながらTypeScript(面倒なので、これからはTS、JavaScriptはJSで)を読んでいくと、

 

■変数の宣言

var が VBで言うDim 変数を宣言するおまじないで、

: As

そして、TSは型という概念(?)を持っているので、

ここでは、HTMLButtonElement という型を 変数 fmBtn に持たせて(宣言して)あげた

という感じになる。

 

これで変数の準備ができたので、

 

続いてHTML(document)からButtonを取得してあげてfmBtnに入れてあげるために

document.getElementById (TS的には戻り値にHTMLElement型を持つ関数)を使うのだが、

 

そのまま = で結んで変数に入れてあげても良いのだが、

せっかく型を宣言してあげているので、ここはキャストをしてあげてみる、

 

 

■値のキャスト

まずは、VBでのキャストは、

 

   1:  Dim fmBtm As Button = DirectCast(sender, Button)

 

という感じに書ける、では、TSでのキャストはというと、

そう、コードにある<>で囲まれた部分がDirectCastみたいなものに該当する。

 

document.getElementByIdで取得されたHTMLElement型を

HTMLButtonElement 型にキャストしたいので、

 

   1:  <HTMLButtonElement>document.getElementById("Button1")

 

という感じなる。

 

これで、HTMLButtonElement 型のfmBtn変数ができたので、

いよいよ、

 

■コード(行)の終わりに

の前に、VBにはないおまじないが最後に必要である。

 

このおまじないはC言語ではおなじみで、最後にセミコロン(;)を書くことで、

その書いているコードが、ここで終わりですよというのを教えてあげる。

 

VBから入るとセミコロンを忘れやすいので、気をつけたい。

(一応コンパイラが理解できる書き方であればJSに変換される際に付けてくれる)

 

 

■いよいよボタンイベント(TypeScript)の追加

これで、ようやく完成、

続いて、fmBtnのクリックイベント、onclick にイベントを結合してあげる

 

っと、その前に話をちょっとだけ脱線するが、

VBではなく、C#の場合はどんな感じでイベントを結合しているかを確認してみると、

 

   1:   this.button1.Click += new System.EventHandler(this.button1_Click);

 

といった書き方になるようだ。

 

この他に、ずいぶん前にWPFでC#しかソースがないと嘆いたときに、

C#の+=がAddHandlerに該当することを遠回しに紹介した、

匿名関数、ラムダ式などというやつがあり、

 

その方法で書くとこんな感じでイベントが作れる。

   1:  this.button1.Click += (obj, ev) => {
   2:      //ここに処理を書く
   3:  };

 

蛇足の蛇足ですが、嘆いた当時はVB2008だったので書けなかったラムダ式は

2010以降から書けるようになりました。

 

   1:  AddHandler fmBtm.Click,
   2:      Sub(obj As Object, ev As EventArgs)
   3:          'ここに処理を書く
   4:      End Sub

 

 

さて、このイメージで話を戻して、上の方のTSのコードを見ると、

C#のような感じでアロー関数というのを書いてあげることで、

イベントに機能を追加してあげることができる。

window.onloadも同じ形式で書かれていることに気づかれたかと思う。

 

ちなみに、この書き方はかなり省略型なのですが、

 

詳しいことは他力ちゃんで、こちらが良いかと思います。

 

【TypeScript】アロー関数式について

 

 

■今回のコード

ということで、TSのコードを再度書いてみると、

 

   1:  window.onload = () => {
   2:      var fmBtn: HTMLButtonElement = <HTMLButtonElement>document.getElementById("Button1");
   3:   
   4:      fmBtn.onclick = () => {
   5:          alert("イベント");
   6:      };
   7:  };

 

こんな感じで、よーーーやくonclickイベントが書けたところで、

その3へ続く・・・。

 

の前に、1つ、クリックイベントの内容を取得したい場合は、

 

   1:  fmBtn.onclick = (e) => {
   2:  }

 

と e とか言う感じで変数を入れてあげると、MouseEvent型が取得できる。

 

 

関連記事

VB的に覚える TypeScript その1 〜 Visual Studio 2015

VB的に覚える TypeScript その2 〜 Visual Studio 2015

VB的に覚える TypeScript その3 〜 Visual Studio 2015

VB的に覚える TypeScript その4 〜 Visual Studio 2015

 

HTMLアプリのデバッグができない?〜VS2015 + HTMLアプリケーション

XAMLデザイナーのデザインビューが表示されない?〜Visual Studio 2015

 

VB的に覚える TypeScript その1 〜 Visual Studio 2015

  • 2017.03.09 Thursday
  • 22:34

 

さて、そろそろ自分もWeb開発でもしようかと思い立ったが、

もはや追いついていけないレベルな今日この頃。

 

せいぜいしーた朗を作るのが限界

 

   1:  //度->ラジアン変換
   2:  function fcDegToRad(srcValue) {
   3:      "use strict";
   4:      if (srcValue === 0.0) {
   5:          return 0.0;
   6:      } else if (srcValue === 1.0) {
   7:          return Math.PI / 180.0;
   8:      } else {
   9:          return (Math.PI * srcValue) / 180.0;
  10:      }
  11:  }

 

こんな程度の簡単なスクリプトを書ければ良い方で、

 

ずいぶん前に投稿したが、

このソースの=== の部分でも始め警告の意味が分からなかった。

 

今どきのJavaScriptのソースを読むと、

(function () {} ()) ってどういうこと?

 

   1:  (function () {...}());

 

$ってなんだよ、(function ($) {}(jQuery))ってどうなっているんだ?

 

   1:  (function ($) {}(jQuery));

 

とか

 

こちらの記事が分かりやすい

(function($) {})(jQuery);って何?って思ったからいろいろ試してみた記録

 

 

しばらくホームページとか作っていない間にずいぶんと言語が進化(?)していて、

原始人にはもはや追いつけないレベル。

 

 

さて、長い前置きはこのくらいにして、

何かWeb開発(といっても、自分の中ではしーた朗レベルがサクッとできればよいのだが)で入り込める余地はないかと、

この2年くらい模索していたのだが、

 

TypeScriptという言語がなんだか良さそうに思えたので、

ちょっと勉強してみることに、

 

この言語、MicrosoftによってJavaScriptの代替言語として開発されたもので、

ここでもおなじみVisual Studioでももちろん開発が可能である。

 

 

ということで、早速勉強してみようと思ってはみたが、

全く文献がない(特に日本語で)のが欠点かもしれない。

(いや、最近の開発は英語ができないともはや開発できないのかもしれない)

 

ある文献といっても2014年とかで完全に停滞とか

本当に大丈夫なのか?と不安もよぎるが、

 

まぁ、Google(Angular)もTypeScriptで開発を、今のところ、進めているので、

しばらくは大丈夫だろうと言うことで。

 

 

ただ、本当に文献が少なくて分からないのだが、

ゴリゴリ書いてみたところ、

これはVB(VBA)の感覚と似ているなと思ったので、

 

もし自分のようにWeb開発をしてみたいけれど、

VBなどのフォームアプリしか書いたことが無いという人が

これをきっかけにゴリゴリ書けるようになればいいなと

 

ちなみに、先日作ったみはるちゃん

すべてTypescriptで書いたものです。

 

 

■Visual StudioでTypeScriptを開発する

さて、前置きの前置きも長くなりましたが、

Visual Studioのどのプロジェクトで開発しようかということで、

TypeScriptを使用したHTMLアプリケーションでまずは書いてみることに

 

 

プロジェクトができたら、チューニング

ずいぶん前に書いた、デザインビューが表示されないという件と同じで、

HTMLファイルを普通に開くとタグをゴリゴリ書くソースモード(下)になってしまうので、
 

 

デザイナーモードを既定にしておくとよい(かも)

 

htmlファイルを右クリックして、ファイルを開くアプリケーションの選択

プログラムから開く の中からHTML(Webフォーム)エディターを選択

ついでに、既定値として設定しておいても良い。

 

 

これでフォームをデザインしながらソースをいじれるように

 

それと、ちょっと前に書いた、

デバッグができなくなる場合があるので、

設定を書き換える

 

 

今回はとりあえずここまで

 

 

追記

プロジェクトの作成ついでで、TypeScriptのコンパイラのバージョンを調べたいときは、

ヘルプメニュー→Visual Studioのバージョン情報

 

インストールされている製品の中から現在のコンパイラのバージョンが分かる。

 

 

ちなみに、SDKのインストール先は、

C:¥Program Files (x86)¥Microsoft SDKs¥TypeScript

¥は半角

 

に歴代のバージョンが並んでいて、

仮に、インストールされている古いバージョンでコンパイルしたいときは、手動で修正するしかないようだ

 

プロジェクトファイルをテキストエディタで開いて、

 

TypeScriptのバージョンをコンパイルしたいバージョンに変更する。

 

 

 

参考

Which Version of TypeScript is Installed and Which Version is Visual Studio Using?

 

 

関連記事

VB的に覚える TypeScript その1 〜 Visual Studio 2015

VB的に覚える TypeScript その2 〜 Visual Studio 2015

VB的に覚える TypeScript その3 〜 Visual Studio 2015

VB的に覚える TypeScript その4 〜 Visual Studio 2015

 

HTMLアプリのデバッグができない?〜VS2015 + HTMLアプリケーション

XAMLデザイナーのデザインビューが表示されない?〜Visual Studio 2015

 

NullをReplaceできるのか?〜VB2015

  • 2017.03.08 Wednesday
  • 21:57

 

Null文字("")を文字置換できるのか?

という質問をもらったので、試して見た。

 

つまり、第1引数に""を入れて、第2引数に置換するという感じ。

 

まず、なにも入っていない文字列を置換してみると

 


 

エラー

適当な文字を入れて見ても

 

 

同じエラー

つまり、Replaceの第1引数に Null ("") を入れることはできないようだ。

 

ちなみに、""文字を""以外で置換するのは

 

問題なさそう

 

話ついでに、Nothingを入れて見ると

 

 

違うエラーが出るので、事前に判別が必要だ

 

おまけ、当たり前だけれど、文字を""に置換することは可能

 

 

 

関連記事

Replace関数って・・・

 

HTMLアプリのデバッグができない?〜VS2015 + HTMLアプリケーション

  • 2017.02.07 Tuesday
  • 13:10

 

HTMLの開発はBracketsやAtomなどを使ってゴリゴリ書いているのだが、

 

VBをずっと使い続けている自分としてはVisual Studioで書きたい

 

Visual Studio Codeでも良いのだが、VS自体があるので、

あえてCodeを選択するのも今さらな

 

まぁ前置きはこのくらいにして、VSに入っているWeb系のプロジェクトはいろいろあるが、

 

ちょっとHTMLアプリケーションのプロジェクトで書いてデバッグしようとしたら・・・

 

Web.configファイルでデバッグが無効なため、

このページをデバッグモードで実行できません。

以下のオプションから選択してください。

 

デバッグ実行ができないよと警告

 

そして、ラジオボタンを選択してOKしても、

 

操作を完了できませんでした。

エラーを特定できません。

IIS Express Webサーバーを起動できません。

 

とか立て続けに警告

 

あれ、保存する前は起動できたのに・・・。

(プロジェクトを任意のフォルダに書き出す前はデバッグはできた)

 

Web.configには、debug="true"と書いてあるし、

ネットで調べてもdebug="true"を書くみたいな内容しか出てこない

 

とりあえずデバッグならプロパティの設定も見て見ようと探してみたところ、

どうやら、この辺を直すといいらしい。

 


 

プロジェクトのプロパティを開いて、Webタブを選択

 

ページを指定するにチェックを入れて、直接 index.html と打つか、ページを選択する

※index.htmlを選択した場合、テキストボックスが空になることがあります。

 

これで再度デバッグでようやくデバッグ起動できました。

 

ちなみに、登録しても上のエラーが出る場合は、一度プロジェクトを閉じて、

開き直すとうまくいいくようです。

 

 

関連記事

XAMLデザイナーのデザインビューが表示されない?〜Visual Studio 2015

 

 

ブレークポイントが突然現れる!?位置ズレ?

  • 2017.01.13 Friday
  • 06:25

 

プログラムをゴリゴリ書いて、早速デバッグ!

と思ったら、変なところでブレーク

 

 

!?

 

こんなところにブレークポイントを貼った覚えはないぞ???

 

デバッグを停止すると確かにブレークポイントはない

 

 

とりあえず、クリーンして、リビルド!

 

改善しない・・・

 

 

ネットで調べると、改行コードが混在しているとかで、解決できると書かれている記事もあったので、

調べてみたが、それらしい誤りはなさそう。

 

 

ムムム、お手上げ・・・か?

 

 

そういえば、ブレークポイントを貼り付けた一覧がどこかで見られるはず・・・

と調べてみると、ありました。

 

デバッグ→ウインドウ→ブレークポイント

 

 

この一覧からそれっぽいもの(該当しそうな行)をチェックを入れたり切ったりしながら調べてみる。

 

すると、該当する箇所がありました。

しかもダブルクリックすると、見つかりませんとか出る・・・。

 

ブレークポイントへ移動できません。指定されたパスが見つかりません。

 

 

チェックを外すとブレークが消えるので、明らかにここが原因であると言える。

 

要らないので削除してみたら・・・

 

 

ようやく解決できました。

 

 

ちなみに、今回の大きな原因は、

ファイル名を変更したことにあるようです(図中、ソースファイル名を小文字から大文字に変更)。

 

 

なお、DLLなどで正しく引っかからない場合は、

クリーン→リビルドでだいたいなおるはずです。

 

 

参考

ブレークポイントの使用

 

関連投稿

ブレークポイントは現在の設定ではヒットしません〜ソリューションのデバッグ

 

 

ReportViewが表示されない?〜Visual Studio 2015

  • 2016.08.26 Friday
  • 20:06

 

Visual Studio 2008からアップグレードしたプロジェクトをゴリゴリ修正して、

いよいよ終盤ということで、印刷機能を修正しようとしたら

 

ファイルアセンブリ Microsoft.ReportDesigner Version=9.0.0.0 〜〜〜 またはその依存関係の1つが読み込めませんでした。

見つかったアセンブリのマニフェスト定義はアセンブリに一致しません。

 

となってしまった。

 

参照を見ると、アップグレードしたプロジェクトは9.0.0.0のReportViewが使われており、

2015のReportViewは12.0.0.0なので、バージョンの不一致により正しく表示できないようである。

 

VS2008をアップグレードしたプロジェクト

 

プロジェクト上では12.0.0.0となっている

 

VS2015で新規に作った場合は12.0.0.0が参照されている


 

とりあえず、新規にプロジェクトの参照を確認しながらバージョンを変更してみることに

 

参照の追加から、参照マネージャーを開き、

アセンブリの拡張を選択、Microsoft.ReportViewerを探して、

バージョンの9.0.0.0はすべてチェックを外し、12.0.0.0にチェックを入れ、参照ボタンをクリックして

バージョンの入れ替えが完了するはず。

 

 

ちなみに、Commonというのはこのダイアログにはないので、

もし必要があれば、

 

C:¥Windows¥assembly¥GAC_MSIL¥Microsoft.ReportViewer.Common¥12.0.0.0__89845dcd8080cc91¥Microsoft.ReportViewer.Common.dll

※¥は半角

 

あたりを参照すれば良い

 

 

追記

さて、コンパイルも終わり、クライアントに導入しようとしたら・・・

ランタイムがないというエラーが

 

ああ、すっかり忘れていたということで、

Microsoft Report Viewer 2015 Runtime

を落としてきて入れようとするが・・・

 

 

Microsoft SYstem CLR Types for SQL Server 2014がないからインストールできないよ

という案内が・・・

しかも不親切にURLとかないし・・・。

 

仕方がないのでキーワードで検索したところ、どれを落とすの的な感じに・・・。

 

とりあえず、Microsoft® SQL Server® 2014 SP1 Feature Packと検索されているダウンロードページを開き

※SP1を適用しない場合は、SP1無しの方

 

ダウンロードボタンを押してみると、SQL関連のリストがズラズラと表示される。

 

 

その中から SQLSysClrTypes.msi というのを探し出す。

※OSが64bitならx64 32bitならx86のSQLSysClrTypes.msiにチェックを付ける。

 

ダウンロードしたインストーラのプロパティが「Microsoft SYstem CLR Types for SQL Server 2014」と書かれているので、

問題なさそうだ

 

 

あとは、このランタイムを入れて、ReportViewerランタイムを入れれば動作するはず。

 

あれ?登録できない〜VS2015

  • 2016.02.29 Monday
  • 18:59

自作プログラムを作って、他のパソコンに入れたのだが、
何度やってもタスクバーに登録できない。

何でだろうとグーグル先生に聞いたところ、
次の記事が見つかった。

Windows 7 でタスクバーにピンで留めれないプログラムの名前
Application that won’t Pin to Taskbar in Windows 7

なるほど、制限されている文字があるのか。
プログラム名を変えるか、タスクに止めるのを諦めるかである。


ちなみに、Win8以降のOSは登録できるようになっているので、
Win7とか以前の制限のようだ。
 

新規行に入力すると2行追加される?〜DataTableとAllowUserToAddRows

  • 2016.02.29 Monday
  • 12:51

しばらくぶりのDataGridViewな話題

これまでDataGridViewのプロパティにある、AllowUserToAddRowsをFalseにしていることが多かったので、
これまで気にもしなかったのですが、
(追加は別入力画面で入力→登録ボタンでDataTableにNewRowして追加)

たまたま作っているプログラムで新規追加をAllowUserToAddRowを利用してみることにしたのだが、

DataTableにNewRowしてAddすると・・・
 
newRow = dtTable.NewRow '新規行を作成
newRow(0I) = CObj("bbb"'データ書き込み
Call dtTable.Rows.Add(newRow) 'データテーブルに行を追加
 
DataGridView DataTable AllowUserToAddRows 2行追加されてしまう DataGridView DataTable AllowUserToAddRows 2行追加されてしまう

!?
追加した行に加えて謎の行出現

何となく、AllowUserToAddRowであらかじめ追加されている行とDataTableの行が一致していないために
追加と同時にDataTableでAddした行+AllowUserToAddRowの空欄行が追加されてしまうのではないかと想像される。

解決方法がないかと検索してみたところ、次の記事が見つかった。

DataGridView(バインド)の追加行のCell値をPGから設定した時、DataGridViewに行を追加する方法

これを参考にゴリゴリ書き直してみる
 
If e.RowIndex = Me.NewRowIndex Then '新規行に追加しようとしている
    Dim cmTable As CurrencyManager = BindingContext(dtTable) 'CurrencyManagerを取得
    Call cmTable.EndCurrentEdit() '編集を終了
End If
‌ 
DataGridView(0I, e.RowIndex).Value = "bbb" 'データを追加

これで、謎の行が追加されなくなりました。

関連投稿
DataGridViewのボタンにアイコンを付ける
DataGridView と DataTable と Combobox(コンボボックス)
DataViewのデータ(抽出結果)からDataTableの位置を検索
DataSource(DataTable)を検索する
DataGridViewの固定とエラー
DataGridViewの選択レコードからDataTableのレコードを見つける
DataGridViewが右揃えにならない?〜VB2008
DataViewの検索フィルタ〜VB2008
Comboboxは何を入れるのか?DataGridView編〜VB2008
 

アナライザーエラーって何ライザー?〜VS2015

  • 2016.01.24 Sunday
  • 23:28

VS2015を使い始めて気になるエラーがある。

AD0001 アナライザー 警告
 
AD0001    アナライザー
'Microsoft.CodeAnalysis.VisualBasic.CodeFixes.SimplifyTypeNames.
VisualBasicSimplifyTypeNamesDiagnosticAnalyzer' が
型 'System.ArgumentNullException' の例外をメッセージ '値を Null にすることはできません。
パラメーター名:source' 付きでスローしました。

ネットで調べてみてもこの警告がなんで起こるのかよく分からない

とりあえず、この記事をヒントに、

Visual Studio 2015 Analyzer threw an exception

一からソースを確認して見たところ(自分のソースではApplication.Designer.vbは関係なかった)、
私のソースの場合、PictureBoxを継承したクラスの処理にある、この部分に対しての警告であることが判明した。

アナライザー 警告

Me.Image = Nothingと書いた部分これをコメントアウトすると、
警告が全くなくなった。

もう一度戻すと再び警告復活!
最終的に、Me.と書いた部分に問題があることが分かった。

Image = Nothing ならOK
 
上は継承クラスでしたが、フォーム上にある、例えばPictureBoxに対しても同じエラーが出ます。

Me.PictureBox1.Image = Nothing 'エラーが出る
PictureBox1.Image = Nothing    'エラーがでない


VBAくらいから、自分がどこの誰という書き方をしてきたので、
(特に継承の場合は、MeなのかMyBaseなのか区別したいときなど)

VSのバージョンアップとともに、ちょっとした書き方の違いでアナライザが反応してしまったようだ。

特にVS2008からVS2015に更新し、ソースを書き換えているので、
古いソースをバージョンアップするとこのエラーがこれでもかと出てしまう。

ひー!


とりあえず、コンパイルもできそうだし、例えば上程度の書き方に対する
警告であれば、警告表示を消してしまいたい。


ということで、ソリューションの参照からアナライザーを右クリックして、
アクティブなルールセットを開くを選択

AD0001 アナライザー 警告

ルールセットの中から、例えば今回であればAD0001を探してチェックを外す

AD0001 アナライザー 警告

これで保存して、プロジェクトを再起動すればたぶん警告はなくなる。


この方法は、あくまで警告を出さなくする一時しのぎであるので、できればソースを見直して警告を潰していく方が良いと思う。


ちなみに、VB6までは、set hoge = nothing という書き方(オブジェクトを破棄する)が一般的だったが、
VB.netの世界ではNothingで初期化(破棄)すること自体があまり良い書き方とは言えないので、
(破棄する場合は、DisposeやClose、Clearなどの破棄メソッドでおこなう)
こういったNothing代入は極力控えたいところである。

そういった意味での警告であると受け取ってソースを変更した方が望ましいと思う。

参考
変数に Nothing をセットしてもリソースは解放できません
Nothing (Visual Basic)
第34回 値型と参照型
Nothingの代入は暗黙的な初期化と同じ


追記190126
■解決方法
ソースを見直すことで、解決できそうです。
特に自作のクラス等で初期値、または、初期化でNothingを入れているところがキーになります。
 
あるコントロールクラスに、例えば、
 
Public Property Test() As String()

見たいなプロパティを作って
フォームなどに貼り付けると、そのフォームのdesigner.vbにコントロールが自動生成され、
 
Me.HogehogeCtrl.Test = Nothing

というのも生成される。
これもこの警告の原因となるようだ。

デザイナーの中なので、コメントアウトしたとしても、例えば新たにコントロールを追加したりすると
初期化されてしまう場合がある。
デザイナーで初期化しない、つまり非表示にしてしまうには、

プロパティに、<DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)>を付けて非表示設定してあげれば良いようである。
 
<DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)>
Public Property Test As String()
   

上の場合は配列だったが、
 
Public Property Test() As String

というのも警告の対象で、上のようにDesignerSerializationVisibilityで初期化を回避しても良いし、
 
Public Property Test() As String = ""

とNothing以外で初期化してあげても良い。
とにかく警告の通りNothingによってThrowしているので、何かしら値を入れてあげれば解決できるようだ

プロジェクトを開いた段階では警告がなく、
ソースファイル(ドキュメント)を開いたら警告が表示された・・・、という場合は、
そのソース内に、不具合箇所があります。

なので、ドキュメントを全部閉じて、プロジェクトをいったん閉じ、
再度開き直して、一つずつソースを開いていくと、対象箇所の判別がしやすいです。
(開いても警告が出ないファイルは今回の問題には関係ない)

ちなみに、開いたとたんに警告が出る場合は、
スタートアップフォームに登録されているフォーム自身に対象があると考えられます。
 

 

ファイル直下のフォルダ名(パスではない)を知りたい〜VS2008

  • 2016.01.23 Saturday
  • 16:40

ファイルのパス(フルパス)を知りたいときは、
一番単純にGetDirectoryNameで取得できると思う。
 
Dim myPath As String = IO.Path.GetDirectoryName("C:¥aaa¥bbb¥ccc.txt")


では、ファイル直下のフォルダ名、上で言うところの bbb を取得したいときはどうしたらよいのか。
検索の仕方(キーワード)が悪いのか、出てこないので覚え書き。


例えば、上のmyPathをGetFileNameを使って
 
flParent = IO.Path.GetFileName(myPath)

という方法もあるのだが、あまりいいやり方とは言えない。

ファイルの情報を知りたいときに使うFileInfoを使う方がよい。
 
Dim fiFile As IO.FileInfo = New IO.FileInfo("C:¥aaa¥bbb¥ccc.txt")
Dim flParent As String = fiFile.Directory.Name

fiFileにファイル情報が展開され、その中に、DirectoryというDirectoryInfoクラスのプロパティが同時に作成される。

Directoryプロパティは、自分のフォルダの情報となるので、C:¥aaa¥bbb の情報が入る。

このプロパティのNameプロパティを呼び出してあげることで、
目的の自分直下のフォルダ、ここでは bbb を受け取ることができる。

ちなみに、ドライブ直下でやると、C:¥としてくれる。

同じようにフォルダの直下を知りたいなら、
IO.DirectoryInfo("C:¥aaa¥bbb") して、そのParentプロパティから aaa が取得できる。
なお、ドライブ直下の場合は、ParentはNothingとなる

 

calendar

S M T W T F S
1234567
891011121314
15161718192021
22232425262728
293031    
<< October 2017 >>

search this site.

よく使う、検索される投稿

categories

アマゾン

楽天

selected entries

archives

recent comment

recent trackback

profile


※当ブログはリンクフリーですが、 取材や雑誌等で掲載される場合は、事前にお知らせください

others

mobile

qrcode

powered

無料ブログ作成サービス JUGEM