60代半ばで始めたC#プログラミング

物忘れが激しく、痴ほう症が心配で何かないかなと思っていたら、マイクロソフト Visual Studio 2017が個人向け(作成したアプリを販売することはできない)には、無料で使用できるということで始めました。

 

最初はメインで使用しているOSがubuntuなのでWindows10とどちらでも使えるC++をやりたかったのですが、新規作成でウインドウが開いたら既に文字化け状態で、結局原因がわからずに断念しC#を始めました。

 

NETで検索しているとC#が一番良いと言う人が多いです。

ただ、C#は割と簡単にできる代わりに、CやC++のようにOSを作ったり、難しいことができないことがあるらしい。

 

 

参考書

Visual C# 2017パーフェクトマスター

私はこの本で始めましたが、本当の初心者向けの解説本はわかりやすいですが、覚えてしまったら後で役に立たないような気がする。

マイクロソフトのサイトにはもっと詳しく載っているが、私は最初は理解できなかった。

最初にこのような本を見ると、覚えるのが早いかも。

もっと良い本があるかもしれないが、私は知らないだけ。

 

VisualC#2015逆引き大全500の極意

この本は500種類のサンプルプログラムがあり、便利ではないかと思う。

ただ、超初心者向けではなく、サンプルプログラムでは動くのに、一から自分で作ったら動かないことがある。

何故だろうと調べていたら、説明の中に省略しているものがあった。

デバッグするのも、勉強の一つで、これも勉強になった。

便利な機能がたくさんあって、お勧め!

 

NETで検索

最初はあまり見つからなかったが、よく探すと結構ある。

ほとんどが、古いVisual Studioなので、そのままでは動かない可能性が多い。

これも、非常に勉強になる。

今までの感じからすると、Visual Studio 2010のC#(C++などは不明)のソースは、ほとんどそのまま動いている。

 

マイクロソフトのサイト

https://docs.microsoft.com/ja-jp/dotnet/csharp/programming-guide/index

最初は何が書いているか、わからなかったが必需品になった。

検索したらまっ先にヒットする。

初心者向けの本のようにわかりやすく書いていないが慣れたらわかるし、サンプルプログラムがたくさんある。

 

 

NuGetは必ずインストールするべき

NuGet は .NET プロジェクトにライブラリーやツールを追加するためのパッケージ管理ツールです。

簡単に言うと、標準で付いていないプログラムをユーザーが作り、それを無料で利用させていただくものです。(有料もあったような気がする)

 

インストールと使い方は下記のHPで

http://yohshiy.blog.fc2.com/blog-entry-236.html

 

 


GUIで作成できないだけで、コードを見たらVSと間違うくらい同じ。

 

using System;
using System.IO;
using System.Drawing;
using System.Windows.Forms;

namespace
Wallpaper
{
    public class MainWindow : Form
    {
        public MainWindow()
        {
            PictureBox pictureBox1 = new PictureBox();
            PictureBox pictureBox2 = new PictureBox();

            string imgback = @"/home/**/Pictures/
X-2_20171026-8-1.jpg ";
            int imgbackX = 1200;
            int imgbackY = 675;

            string imgCalendar = @"/home/**/Pictures/Calendar201711.png";
            int imgCalendarX = 319;
            int imgCalendarY = 206;

            this.Size = new Size(imgbackX + 8, imgbackY + 27); 

            this.Text = "Wallpaper";

 

            // pictureBox1
            pictureBox1.Location = new Point(00);
            pictureBox1.Size = new Size(imgbackX, imgbackY);   
            pictureBox1.ImageLocation = imgback;
           

            // pictureBox2
            pictureBox2.Location = new Point(imgbackX - imgCalendarX - 20, imgbackY - imgCalendarY - 20);
            pictureBox2.Size = new Size(imgCalendarX, imgCalendarY);
            pictureBox2.ImageLocation = imgCalendar;


this.Controls.Add(pictureBox1);             this.Controls.Add(pictureBox2);

            this.SuspendLayout();
            this.Controls.SetChildIndex(pictureBox2,0);
            this.ResumeLayout();

        }
    }

    public class main_class
    {
        public static void Main(string[] args)
        {
            MainWindow win = new MainWindow();
            Application.Run(win);
        }
    }
}

MonoDevelop

Linuxにもずいぶん昔からC#があったようで、MonoDevelopというものを見つけたのでUbuntuにインストールしてみた。

 

Windows・Mac・Linux用がありビルドした実行ファイルが*.exeだったのでWindows10で動作するか確認すると動かなかった。残念

何処かのサイトで見たが、.NETでWindows・Mac・Linuxのどの環境でも動作するらしい。

 

どうも、mono ****.exeとmonoで実行しないといけないようだ。

 

GUIのアプリを作成するのにVisualStudioみたいにGTK#というのがあるが、ネットでマニュアルを見るとほとんどが英語でVSで勉強した知識が全然役に立たない。翻訳しても意味が??。記憶力が衰えておぼえられない!

 

調べていたら、VSとほとんど同じコードで記述できる方法があった。

配置・設定等をすべてコードで記述するという、めちゃくちゃめんどくさいが、新しいもの覚えられないので我慢して、左の壁紙もどきが完成。

まだ、タイトルバーを非表示にする方法・全画面にする方法・カレンダーの背景を透明にする方法等がわからないので、まだまだだが、少しずつ発展させればいいか・・

VSの使い方はネットで検索すればいっぱい出てくるので楽です。

 

 

Windows10とVS2017 C#で作成したアプリがubuntuで動く

VS2017のC#で作成したアプリをMonoDevelopでビルドし直すと、動くものと動かないものがありましたが、特殊なものを除いて修正すれば動くようです。

 

今回、試したもので動かなかったのは、Windowsとubuntuでパス名の記述の方法が異なるためで、

D:¥・・・¥***.jpg  (Windows表記)

/media/user/ボリューム/・・・/***.jpg  (ubuntu表記)

と変更するだけで動きました。

問題点もありますが。

1.見栄えが少し悪い。

2.ubuntuにWindowsのフォントが無いせいか、フォントが代わり文字が大きくなってウインドウ・コントロールからはみ出て文字が切れている。

3.VS2017はコードエディターとデザインエディターがあるが、MonoDevelopの方ではコードエディターしか使用できなかった。GTK#と併用できるか試したら、using  System.Windows.Forms;と記述しただけでエラーがでた。

 

フォントサイズ等変更すれば、一応使用することができます。

MonoDevelopはVS2017に比べて使いにくいので、VS2017で作成してMonoDevelopでビルドし直してubuntu用のアプリを作成したら、Windows10とubuntuで同じアプリが使用できる。

 

マイクロソフトが提供している.NET Coreを使えば、Windows・Mac・Linuxで動くアプリが作成できるらしい。

 

残念ながら、私がインストールしたVerのubuntuの.NET Coreが作成されていなかった。

 

<備忘録>

VS2017 C#で作成しMonoDevelopでビルドすると、MonoDevelop上では動作するが、作成された*.exeをmonoで実行すると動作しなかった。

原因)参照追加した*.dllファイルが実行ファイルと同じフォルダになかった為、コピーすると動作した。(パスの通ったフォルダにあると良いのか?)

MonoDevelopで作成したアプリの起動方法

MonoDevelopのReleaseでビルドしてできた***.exeは、端末を起動して 

mono ***.exeで起動するか、シェルスクリプトを作成するか、ショートカット等を作成する。

 

この中でショートカットが一番手軽な方法です。

テキストエディタで****.desktopを作成し内容は、

 

[Desktop Entry]
Name=ショートカットに表示される名前
Comment=This is my comment
Exec=mono パス/***.exe
Icon=/home/****/bin/icon/application.png
Terminal=false
Type=Application


DotNetを使いMonoDevelopで作成した実行ファイルをMonoを使わずに実行できるようにする。

 2017/12/20

通常MonoDevelopで作成された*.exeファイルは、$ mono *.exe として実行するが、これを実行ファイルそのものだけで実行できるようにする。(表現が正しくありませんでした。$ ./実行ファイル名 エンターで実行することが出来ますが、同じフォルダにできたライブラリ?と言うのか10個程度のファイルが同じフォルダに無いと動かないようです。monoが必要ないのは間違いないですが。)

ただし、GTK#・その他 出来ないものもある。Consoleプロジェクトでしか使用出来ないようです。

というよりやり方がわからないという方が正しいかも知れない。

 

https://www.microsoft.com/net/learn/get-started/linuxubuntu

にはUbuntuにdotnetをインストールする方法が書かれているのでインストールする。

現在は、Ubuntu 17.10にもインストールできるようになった。

 

MonoDevelopで作成したConsoleプロジェクトでそのまま、ビルドしようとしたがエラーがでて出来なかった。

これも、やり方がわからないだけかも知れない。

MonoDevelopで作成された、*.csファイルだけを別のフォルダにコピーする。

*.csprojを  http://vbegg.webcrow.jp/Linux/HowToBuildForExe/HowToBuildForExe.html

プロジェクトファイルの編集

に載っている方法で作成する。

後は、上記サイトの方法でビルドすると単独で実行できる、実行ファイルができる。

 

2017/12/21

自分では、大したプログラムを作ることが出来ないのいですが、ネットで見つけたプログラムでUbuntuの MonoDevelopで動くConsoleプロジェクトのプログラムは大抵動きます。

MSのSystem.Windows.Formsというライブラリを使ったディスプレイの解像度を取得は、Ubuntuの MonoDevelopで動来ますが、DotNetではエラーが出て動きませんでしたが。

しかし、ターミナル(コマンドプロンプト)上でしか動かないのは、ちょっと使い勝手が悪いですね。

同じソースでWindows,MAC,Linuxとビルドは別々に行うことが必要ですが同じプログラムが違うOS上で動くことに意味があると思いますが。

MonoDevelopのButton,Labelのフォント、フォントサイズ等を変更する。

 

 //button1.Settings.FontName = "IPA明朝 30";  //Button1以外の他のButton,Labelも変わる
Settings.FontName = "IPA明朝 30";   //単独で変更できない
button1.SetSizeRequest(200100);
button1.Label = "ボタン1";

 

これを探し出すのに何日かかったことか。

ネットで探しても出てこないし。

VC#やったらプロパティでチョイと数値等をいじるだけ。

プロパティウインドウはいくら探しても見つからない。

VC#は本当に楽で簡単や!

この壁紙カレンダー(実際は壁紙ではなくアプリケーションを全画面表示にしているだけ)を奇数日は左側、偶数日は右側を表示するプログラムを作りスタートアップフォルダに入れてある。(メモリ消費量をタスクマネージャーで確認すると、左側が7.6MB、右側が8.8MB、因みにFirefoxは700~1000MB消費する)

一応システム時計を読み込んで自動で更新する。一から自分で作ったのでアルゴリズムというか?多分めちゃくちゃ。

分からない所は、ネットでこんなことがしたいと検索すれば大抵あったりする。ない場合は、あきらめるか自分で考えて作る。

左側はC#を初めて半月くらいでつくった。最初は本の時計サンプルプログラムに画像をいれて、日付は、本かネットで探して追加、ついでにカレンダーは自分で考えてつくった。休日の機能は入っていない。

右側は数日前にできた休日機能を入れるために新しくカレンダーだけを作った。(休日の日付がまだ赤色になっていないが)

 

 

因みに、HPでよくある小さなカレンダーなら、monthCalendarというコントロールをフォーム(ウインドウ)に張り付けるだけでプログラムは不要、数秒で完成する。

アナログ時計

 

解説本のVisualC#2015逆引き大全500の極意にフォーム(ウインドウ)を半透明にする方法、フォームを四角から変形する方法が載っていたので、アナログ時計を作った。

アナログ時計はネットに参考になるサイトがあった。

常にアプリケーションの最前面に来るように設定しているので、常に見ることができる。

 

Windows用マウスカーソル用素材

マウスカーソルに変換する方法

1.上の画像(X-2 、 X-2アフターバーナー 、 F-35 、 F-86ブルーインパルス 、 T-4ブルーインパルス 、 T-2ブルーインパルス)の上で右クリックし「名前を付けて画像で保存」する。(32x32ピクセル)   (上の画像は拡大して表示されているので汚く見えますが原寸大のカーソルを見ると、そんなに汚く見えません。)

2.アイコン・マウスカーソル等の作成ソフトをダウンロードする。(彩彩畑

http://www.vector.co.jp/soft/win95/art/se308766.html

3.彩彩畑をインストールする。

4.彩彩畑を起動する。

5.中央下部の「アイコン」をクリックする。

6.アイコン作成ウインドウが開くので、中央上部の「開く」をクリックする。

7.開くファイルの拡張子を選択してから、ダウンロードしたファイルを開く。

8.まわりの余白部を「透過色(消しゴム)ですべて消去する。」

9.「保存」の隣の「GIF」の横のチェックマークをクリックし「CUR」を選択する。

10.左上のドットに赤枠が来ていることを確認して保存をクリックする。

(万一赤枠が違うところにある場合は、「Home」キーを押しながらマウスで左上のドットをクリックする。)

11.保存された.CURファイルをC:¥Windows¥Cursorsに移動またはコピーします。

(ほかのフォルダーに保存した場合は、次にPCを起動した時に元のカーソルに戻ってしまいます。C ドライブ直下に半角英文字のフォルダーを作ってもよい。

これ以外のフォルダーは不可。)

   -----ここからWindows10用(これ以外はコントロールパネルで設定する)-------

12.デスクトップ上で右クリックして、「個人用設定」をクリックします。

13.「テーマ」をクリックし、「マウスカーソル」をクリックする。

14.右下の「参照」をクリックし、保存した.CURファイルを選択する。

 

このマウスカーソル素材は、すべてWindows付属のペイントで作成しました。(45度回転はGIMP2を使用)

画像を修正すると見栄えが良くなると思います。

 

自分で素材を作成する場合は、

1.画像・写真を左上向くように-45度回転する。

2.ペイントのファイル⇨プロパティで縦横とも同じピクセル数にする。

3.薄い色の場合、黒色で輪郭線を描く。輪郭線の外側は消しゴムツールですべて消去する。

4.すべて選択して、サイズ変更で32x32ピクセルに縮小する。

5.縮小すると、画像が乱れるので適宜修正する。(修正しなくても小さいので、あまり目立ちません。)

6.輪郭線を太く描いたものはあまり出来が良くなかった。

X-2が他のと違ってきれいに見えるのは主翼の後退角が45度で水平、垂直なので主翼部にギザギザがないからか。

X-2 マウスカーソル ダウンロード

 

http://ty21ky.web.fc2.com/JSDF/X-2_4.cur

 

 

バックグランドで作業中、待ち状態 用 X-2 マウスカーソル

(表示しているものはアニメGIFです)

この画像を1枚ずつ順番に下記のアプリの下部にペーストします。

Create -> Create mouse cursor -> タイトルバーのファイル名が*.aniになっている -> フロッピーディスクのボタン ->

Files of types:がAnimated cursor filesになっていることを確認して「OK」 

 

ダウンロード(アニメカーソル)

http://ty21ky.web.fc2.com/JSDF/X-2.ani

 

作成アプリ(Windows10)

RealWorld Cursor Editor

http://forest.watch.impress.co.jp/library/software/realworldce/

 

インストール後、言語の日本語を選択します。

F-22 マウスカーソル

ダウンロード

http://ty21ky.web.fc2.com/JSDF/F-22.cur

 

 

バックグランドで作業中、待ち状態 用 F-22 マウスカーソル

(表示しているものはアニメGIFです)

ダウンロード(アニメカーソル)

http://ty21ky.web.fc2.com/JSDF/F-22_B.ani