Back to Top

プログラムの覚書

Category: C#

.NET C#

C# フォーム(Form)

Visual Studio等でC#を使用してGUIアプリケーションを作成する場合に使用するFormの説明です。

ウィンドウであるフォーム(Form)クラスの基本的なプロパティ・メソッド・イベント等について記載します。

 

フォームの境界線スタイルを指定する

フォームの境界線スタイルを指定するには、フォームのFormBorderStyleプロパティを使用し指定します。

FormBorderStyleプロパティはFormBorderStyle列挙体です。

this.FormBorderStyle = FormBorderStyle.FixedDialog;

 

フォームの最大化・最小化・閉じるを非表示にする

フォームの右上にある最大化、最小化ボタンの表示・非表示の設定は、MaximizeBox・MinimizeBoxプロパティを設定します。閉じるボタンの表示・非表示はControlBoxを設定します。

※閉じるボタンを非表示にすると最大化、最小化、閉じるボタンも消えます。

//最大化ボタンの表示、非表示を切り替える
this.MaximizeBox = false;

//最小化ボタンの表示、非表示を切り替える
this.MinimizeBox = false;

//コントロールボックスの表示、非表示を切り替える
this.ControlBox = false;

 

フォームの最大サイズ・最小サイズを設定する

//フォームの最大サイズを設定する
this.MaximumSize = new System.Drawing.Size(1024, 512);

//フォームの最小サイズを設定する
this.MinimumSize = new System.Drawing.Size(128, 128);

 

フォームが最大化された時の位置とサイズを設定する

this.MaximizedBounds = new Rectangle(128, 128, 512, 256);

 

フォームをタスクバーに表示しない

this.ShowInTaskbar = false;

 

フォームを常に最前面に表示する

this.TopMost = true;

 

フォームを閉じる

this.Close();

 

フォームを表示する

Form2 fm2 = new Form2();
fm2.Show();

 

フォームをモーダルで表示する

using (Form2 fm2 = new Form2())
{
    fm2.ShowDialog();
}

 

フォームの表示位置を設定する

フォームの初期位置は、StartPositionプロパティをFormStartPosition列挙体で指定します。

fm2.StartPosition = FormStartPosition.CenterParent;

 

フォームをアクティブにする

fm2.Activate();

 

フォームを隠す

fm2.Hide();

 

子コントロールが表示されているかどうか確認

if (fm2.Visible)
{
}

 

コントロールが破壊されているかどうか

if (!fm2.IsDisposed)
{
}

 

フォームに[OK] ボタン・[Cansel]ボタンを追加

private void button_OK_Click(object sender, EventArgs e)
{
    this.DialogResult = DialogResult.OK;
}

private void button_Cancel_Click(object sender, EventArgs e)
{
    this.DialogResult = DialogResult.Cancel;
}

呼び出し側

private void button1_Click(object sender, EventArgs e)
{
    using (Form2 fm2 = new Form2())
    {
        if (fm2.ShowDialog() == DialogResult.OK)
        {
            MessageBox.Show("OKボタンが押されました。");
        }
    }
}

 

フォームが閉じられるのをキャンセルする

private void Form2_FormClosing(object sender, FormClosingEventArgs e)
{
    if (MessageBox.Show("閉じますか?", "確認", MessageBoxButtons.YesNo) == DialogResult.No)
    {
        e.Cancel = true;
    }
}

 

 

C# ネットワークカメラの画像を取得する

C#にてネットワークカメラの画像を取得する方法には、色々ありますが、

ここでは簡単に出来るMJPEG Decoderを使用して画像取得する方法を説明します。

MJPEG Decoderインストール

Visual Stadioの[ツール]-[NuGetパッケージマネージャー]-[ソリューションのNuGetパッケージの管理]を開きMJPEG Decoderを検索してインストール出来ます。

 

MJPEG Decoderによるネットワークカメラ画像取得

サンプルとして、Form上にボタンとピクチャーボックスを配置してください。

MjpegProcessor.MjpegDecoder _mjpeg;

private void Form1_Load(object sender, EventArgs e)
{
    _mjpeg = new MjpegProcessor.MjpegDecoder();
    _mjpeg.FrameReady += mjpeg_FrameReady;
}

private void button1_Click(object sender, EventArgs e)
{
    string url = @"http://192.168.2.100:7777/videostream.cgi?user=admin&pwd=admin";
    _mjpeg.ParseStream(new Uri(url));
}

private void mjpeg_FrameReady(object sender, MjpegProcessor.FrameReadyEventArgs e)
{
    Bitmap Bmp = e.Bitmap;
    pictureBox1.BackgroundImage = Bmp;
}

ParseStream()に渡すURLがカメラのURLになりますが、これはネットワークカメラの仕様によりことなります。(カメラの仕様を見たください)

上記に場合、http://192.168.2.100:7777/がIPアドレスとポートになります。

videostream.cgi?user=admin&pwd=adminがカメラ毎のコマンドでユーザ名・パスワードを設定しています。

 

プロトコル違反の場合

「サーバーによってプロトコル違反が発生しました. Section=ResponseHeader Detail=CR の後には LF を指定しなければなりません。」

のようなエラーが発生した場合、サーバー側の問題なのでどうしようもありません。

これの対処は、「ソリューションエクスプローラー」のApp.configに

<system.net>
   <settings>
      <httpWebRequest useUnsafeHeaderParsing="true" />
   </settings>
</system.net>

を追加します。

 

Posted in C# | Leave a reply