C-MOON

主にプログラミング勉強中のメモを書いていきます。

【C#】「ファイルを選択」ダイアログでフォルダを選択する

C#で作るWindowsフォームアプリで、フォルダを選択することがあると思います。
標準のフォルダ選択クラスとして、FolderBrowserDialogが用意されていますが、フォルダパスの見通しが悪い上、パスのコピペができず、使い勝手が悪いです。 f:id:thenewsinpu:20180421223154p:plain

OpenFileDialogの画面でフォルダを選択可能なクラス「CommonOpenFileDialog」の使用方法を調べたので、手順をメモします。

  1. 使用するソリューションをVisual Studioで開く。

  2. ソリューションエクスプローラーからソリューションかプロジェクトを右クリック→「NuGetパッケージの管理」を選択。

  3. 参照タブで、「windowsapicodepack」を検索。

  4. 「WindowsAPICodePack-Shell」をインストール。(複数ありますが、作成者:Aybeさんのものを選びました。) f:id:thenewsinpu:20180421223251p:plain

  5. 追加したパッケージのusingをソースコードに入力。
    using Microsoft.WindowsAPICodePack.Dialogs;

  6. フォルダ選択画面を表示するコードを入力。

var dialog = new CommonOpenFileDialog("フォルダ選択");
// フォルダ選択モード
dialog.IsFolderPicker = true;

if (dialog.ShowDialog() == CommonFileDialogResult.Ok)
{
// フォルダ選択後の処理
}


以上の手順で、下画像のようなフォルダ選択画面を実現できます。 f:id:thenewsinpu:20180421224159p:plain

【VSCode】VisualStudioCode起動時のようこそ画面を非表示にする

方法1:

ようこそ画面下の「起動時にウェルカムページを表示」チェックを外す。

 

f:id:thenewsinpu:20180421221101p:plain

方法2:

settings.jsonに以下を追加する。

"workbench.startupEditor": "newUntitledFile"

 

ちなみに、方法1でチェックを外した場合も、上記一文がsettings.jsonに追加されます。

 

以上です。

【Excel】行番号を自動で割り振る関数

Excelで行番号をつける際、行の挿入や削除があっても値の変更をする必要が無いよう、以下のような関数を使用していました。

  • 1行目:値として「1」を入力。
  • 2行目以降:=OFFSET(INDIRECT(ADDRESS(ROW(),COLUMN())), -1, 0)+1

 

この関数は、「自身のセルの1つ上のセルの値に+1する」という処理を行っています。2行目以降はすべて同じ内容で良いので便利です。

 

しかし、弱点もあり、下画像のように、間に空行があると番号が振り直されてしまいます。

 f:id:thenewsinpu:20180414231351p:plain

 

A6の値を「=OFFSET(INDIRECT(ADDRESS(ROW(),COLUMN())), -2, 0)+1」にすれば一応解決しますが、空行が有るたびセルの値を変えるのは大変ですし、先ほどの「2行目以降はすべて同じ内容で良い」というメリットが消えてしまいます。

 

この弱点を解消する関数が以下のブロクで紹介されています。

http://knjname.hateblo.jp/entry/2014/03/23/134053

 

=MAX(INDIRECT(ADDRESS(1,COLUMN())&":"&ADDRESS(ROW()-1,COLUMN())))+1

 

この関数は、「今のセルより上の方の最大の番号+1を今のセルに与える」という処理を行っています。

先ほどのエクセルシートの二行目以降を、この関数に置き換えます。

  • 1行目:値として「1」を入力。
  • 2行目以降:=MAX(INDIRECT(ADDRESS(1,COLUMN())&":"&ADDRESS(ROW()-1,COLUMN())))+1

この関数だと、間に空行があっても大丈夫です。

f:id:thenewsinpu:20180414231838p:plain