Day After Day
tsurezure naru mamani...
ANOTHER DECADE

from 2022 when it's begining after/with CORONA Virus.

C#の開発環境もVSCodeで (icon, image)

7月
24
2024
Back
Alt+HOME


Visual Studioは便利だがとても重く、また他のOSでの環境も考慮するとVisual Studio Code(VSCode)を使った方が導入し易いとの記述も見かけて、自分の環境もCやPythonと同じ環境として整理できると思って早速猪突猛進してしまった。

しかし、その新しい環境に慣れるのにも大変で、C#のコードもそのままではすんなり行かず、ChatGPT先生に大変お世話になったこの1ヶ月だった。ど素人の質問にかなりの忍耐で答え続けてくれた先生に感謝の覚え書きである。

フォームのタイトルバーやファイル名にアイコンを表示


Visual Studioではアイコンを指定するGUIが存在したが、VSCodeでは手書きで指定する必要が有る。
  1. アイコン用ファイル(icon.ico)を準備し、プロジェクトのルートディレクトリーに追加する。

  2. プロジェクトファイルを編集する。

  3. <Project Sdk="Microsoft.NET.Sdk">
    
    	<PropertyGroup>
    		  :
    		<ApplicationIcon>icon.ico</ApplicationIcon>
    		  :
    	</PropertyGroup>
    
    	<ItemGroup>
    		<Content Include="icon.ico">
    			<CopyToOutputDirectory>Always</CopyToOutputDirectory>
    		</Content>
    	</ItemGroup>
    
    </Project>
    

    CopyToOutputDirectory の指定はビルドしたとき常にその出力先のルートディレクトリーにコピーされるようにするため。
    又、iconファイルをサブフォルダに入れた場合は、上記該当箇所を次のように相対パスに変更する。
    (エスケープしたバックスラッシュ: \\)

    		<ApplicationIcon>subfolder\\icon.ico</ApplicationIcon>
    		<Content Include="subfolder\\icon.ico">
    			<CopyToOutputDirectory>Always</CopyToOutputDirectory>
    		</Content>
    

  4. ビルドしてみて出力ファイルを確認すると図のようにファイル名の前のアイコンが指定のものになっている。これをプロジェクトアイコンと言う。

  5. dotnet build

  6. 次にフォームのタイトルバー左端に指定のタイトルアイコンを表示させる。

  7. public FrmMain()
    {
    	InitializeComponent();
    
    	// フォームアイコンの設定
    	Icon = new Icon("subfolder\\icon.ico");
    }
    

    dotnet build
    dotnet run
    

フォームにイメージを表示する


    前項の 4.タイトルバーのアイコン指定の上に有る InitializeComponent(); で呼び出されるメソッドの中にイメージに関するものが有る場合、 ファイル名のみの場合はアプリのルートフォルダに、そのイメージを置く。サブフォルダに保存したい場合はそのファイルパスを変更する。

    	private void InitializeComponent()
    	{
    		// 
    		// PicTop
    		// 
    		PicTop.Anchor = AnchorStyles.Bottom | AnchorStyles.Left;
    		PicTop.BackColor = Color.Transparent;
    		PicTop.Location = new Point(6, 117);
    		PicTop.Image = Image.FromFile("subfolder\\image.png");
    		PicTop.Name = "PicTop";
    		PicTop.Size = new Size(625, 351);
    		PicTop.TabIndex = 19;
    		PicTop.TabStop = false;
    	


    Back
    Alt+HOME