株式会社シベスピ 従業員ブログ

シベスピの社員ブログ。技術・想い・経験沢山書いていきます!

【C#】お断りしますウィルス【Windowsフォームアプリケーション入門】

C#】お断りしますウィルス【Windowsフォームアプリケーション入門】

こんにちはIskです。
先日飲み会でブログの話題が上がり、

「何でIskなの?本名にすればいいじゃん」

と言われました。









f:id:chivsp:20170604183335p:plain









そんな「おもてなし」ならぬ「お断り」の気持ちを表すのにピッタリなプログラムを今回は作成しましょう。

概要

今回登場するのは「ダイアログ」と
f:id:chivsp:20170820163624p:plain


「ウィンドウ」の
f:id:chivsp:20170820163621p:plain


二種類になります。

まずはウィンドウの作成からやりましょう。


・お断りしますウィンドウの作成

おなじみプロジェクト作成後の画面になります。
f:id:chivsp:20170820163616p:plain


ツールボックス」から「Label」を選択してフォームに貼り付けます。
f:id:chivsp:20170820163611p:plain


プロパティウィンドウの「Text」にお断りしますのAAを入力します。
左側の「Text」を選択すると右側にこんな(▼)のが表示されるので、
選択してその中に入力します。
f:id:chivsp:20170820163606p:plain


フォントの調整をします。
プロパティウィンドウの「Font」を選択し、右側の[...]を選択します。
f:id:chivsp:20170820163727p:plain


フォントダイアログが表示されるので、サイズを18ぐらいにし、OKを選択します。
f:id:chivsp:20170820163723p:plain


AAが丁度よい感じになるので、ウィンドウの縦幅を小さくし、調整します。
f:id:chivsp:20170820163717p:plain


タイトルバーの「Form1」を「お断りします」に変更しましょう。
フォームを選択し、プロパティウィンドウの「Text」に「お断りします」と入力します。
f:id:chivsp:20170820163708p:plain


タイトルバーの最小化アイコンと最大化アイコンを無効化します。
プロパティウィンドウの「MaximizeBox」と「MinimizeBox」を「False」に設定します。
f:id:chivsp:20170820163700p:plain


フォームのリサイズを禁止するためにプロパティウィンドウの「FormBorderStyle」を「FixedSingle」に変更します。
f:id:chivsp:20170820163805p:plain


実行すると下のようなウィンドウが表示されます。
f:id:chivsp:20170820163801p:plain


しかしこれでは×ボタンを押した時に閉じてしまいますので、×ボタンが押されても閉じず、更に同じウィンドウを追加で表示するようにしましょう。


・ウィンドウを閉じないよう&更にウィンドウを表示する

プロパティウィンドウのイベントアイコン(雷のアイコン)を選択します。
f:id:chivsp:20170820163758p:plain


イベント一覧が表示されます。
ここは選択したコントロール(ボタンやフォームなど)のイベントが表示されます。
「FormClosing」をダブルクリックします。
f:id:chivsp:20170820163755p:plain


コードエディタに移動しますので、次のように入力します。

private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
    e.Cancel = true;
}

これで実行すると、×ボタンを押してもウィンドウが閉じなくなります。
終了するにはexeをタスクマネージャから終了するか、デバッグを停止してください。


メソッドにウィンドウを追加で表示する処理を記述します。

private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
    e.Cancel = true;
    new Form1().ShowDialog();
}

これで実行すると、×ボタンを押すたびに新しいウィンドウが表示されます。
f:id:chivsp:20170820163752p:plain


ウィンドウは一定数表示すると表示数上限に達して例外が発生するので無視しましょう。

・ダイアログを表示する

こいつ↓を作ります。
f:id:chivsp:20170820163624p:plain


ソリューションエクスプローラーで「Program.cs」を選択します。
f:id:chivsp:20170820163841p:plain

これはexeを起動した際に一番最初に読み込まれるプログラムです。
19行目のフォームの生成処理で初めて先程のウィンドウが表示されます。


以下のような処理を記述します。

static void Main()
{
    string text = "  ハ,,ハ" + Environment.NewLine +
                  "( ゚ω゚)" + "      お断りしますが、よろしいですか?";

    MessageBox.Show(text, "Windows", MessageBoxButtons.YesNoCancel);
    
    Application.EnableVisualStyles();
    Application.SetCompatibleTextRenderingDefault(false);
    Application.Run(new Form1());
}

通常はダイアログで選択されたボタンによって処理を変更しますが、今回の場合どのボタンを選択しても問答無用でお断りしていくので特にその処理は記述しません。


さて実行すると次のようなダイアログが表示されます。
f:id:chivsp:20170820163835p:plain


いずれかのボタンを選択すると先程のウィンドウが表示されます。
f:id:chivsp:20170820163832p:plain


消すと増えます。
f:id:chivsp:20170820163829p:plain

・おわり

お疲れ様でした。
今回の内容を活用すると、×ボタンでウィンドウ閉じるときにダイアログを表示し閉じるかどうか確認、のようなフォームアプリケーションにはよくある機能が実現できます。


さて次回も昔なつかしのものを題材にしていきます。
f:id:chivsp:20170820163825g:plain