6月 17

選択中タブページの取得と設定

TabControlのSelectedIndexプロパティーを参照、設定します。
他の方法のサンプルコードにあるので参考までに

なお、ページのインデックスを数値指定すると
どのページなのかコード中でわかりにくいので(数値を見てもページを連想できない)
enum列挙型などでページに名前を付けるといいかもしれません。
intへのキャストが必要になりますが。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        enum enumPage
        {
            Child = 0,
            Adult = 1,
        };

        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            // ページのインデックスを指定する方法
            tabControl1.SelectedIndex = 1;                      // 数値で指定
            tabControl1.SelectedIndex = (int)enumPage.Adult;    // enum型で指定(意味がわかりやすい)

            // SelectedTabプロパティーにタブページを指定する方法(どちらでもOK)
            tabControl1.SelectedTab = tabControl1.TabPages[1];              // ページをインデックス指定
            tabControl1.SelectedTab = tabControl1.TabPages["tabPageAdult"]; // ページのNameで指定
        }
    }
}
6月 17

タブコントロールの使い方

タブコントロールを使えば
下の例のようにページを切り替えるようなGUIを作成可能です。

tab_1

使い方は
まずFormにTabControlを貼り付けます。
初期状態で2ページのタブを持っています。

タブごとの名前や表示テキストを変更したい場合や
タブの追加、削除を行う場合は
TabControlのTabPagesコレクションプロパティーにある…ボタンをクリックしてください。
すると下のようなコレクションエディタが開きます。

tab_2

左側にタブページの一覧
右側に選択中のタブページのプロパティーが表示されます。

タブページの追加と削除はそれぞれのボタンをクリック。

タブページの名前やテキストを変更したい場合は
まずそのタブページを左側の一覧より選択し、
右側に表示されるプロパティーのNameやTextを変更します。

■タブページ上のコントロールの扱い方

ページが分かれているからといって特別意識する必要はなく
例えば、タブページの1ページ目にButtonを配置したとすると

this.tabControl1.TabPages[0].button1 //これはエラーです

のようにタブページを意識したアクセスは不要で

this.button1

のように
Form上に配置された他のコントロールと同じようにアクセス可能です。

6月 17

StatusStrip(ステータスバー)の使い方

StatusStrip(ステータスバー)を使うには
StatusStripコントロールをFormにドロップして配置します。

status

これだけで、Form上でステータスバーが表示されます。
上の画像でもわかるように▼ボタンをクリックすると
ステータスバーに追加可能なコントロールの一覧が表示されます。

ここでは簡単なStatusLabelコントロールを選んでみます。

配置されたButtonをクリックされたら
StatusLabelのテキストを変更するサンプルコードは次のようになります。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            this.toolStripStatusLabel1.Text = "ボタンが押されました";
        }
    }
}

status_button

6月 17

スプリットコンテナの使い方

SplitContainerを使うとFormで分割線を利用できます。
(このサイトでも公開中のフリーソフトFileManyでも利用しています)
下のスクリーンショットはデザイン時のものです。

解像度や状況に応じてコントロールの面積を変更したい場合に利用します。

垂直、水平の分割方法を指定する場合は
Orientationプロパティーに

Orientation.Vertical(垂直方向)或いは
Orientation.Horizontal(水平方向)

のいずれかを指定します。

また、分割線までの距離は
SplitterDistanceプロパティーで指定します。

splitcontainer

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            // 垂直方向に分割
            splitContainer1.Orientation = Orientation.Vertical;

            // 分割線までの距離(垂直方向の分割なので左端からの距離)
            splitContainer1.SplitterDistance = 200;
        }
    }
}
6月 17

スクロールバーの使い方

FormやTextBoxなど、コントロールにスクロールバーを表示する方法もありますが
スクロールバー単体のコントロールも用意されています。

例では
FormにPictureBoxを貼り付けて、起動時に適当な画像を読み込み
(PictureBoxのサイズよりも大きな画像ファイルがいいです)
それをスクロールバーでスクロール表示させています。

scrollbar

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        // 適当な画像を指定(大きいのがいいです)
        Bitmap _bmp = new Bitmap(@"c:\temp\sample.jpg");

        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            // PictureBoxの再描画が必要な時に呼ばれるハンドラ
            this.pictureBox1.Paint += new PaintEventHandler(pictureBox1_Paint);

            // 縦スクロールバーの初期位置、最小値、最大値を設定
            this.vScrollBar1.Value = 0;
            this.vScrollBar1.Minimum = 0;
            this.vScrollBar1.Maximum = _bmp.Height - pictureBox1.Height;

            // 横スクロールバーの初期位置、最小値、最大値を設定
            this.hScrollBar1.Value = 0;
            this.hScrollBar1.Minimum = 0;
            this.hScrollBar1.Maximum = _bmp.Width - pictureBox1.Width;

            // スクロールバーがスクロールされた際のイベントハンドラ
            this.vScrollBar1.Scroll += new ScrollEventHandler(ScrollBar_Scroll);
            this.hScrollBar1.Scroll += new ScrollEventHandler(ScrollBar_Scroll);
        }

        void pictureBox1_Paint(object sender, PaintEventArgs e)
        {
            // スクロールバー位置より元画像を切り抜いて表示
            RectangleF rectSrc = new RectangleF(
                this.hScrollBar1.Value,
                this.vScrollBar1.Value,
                this.pictureBox1.Width,
                this.pictureBox1.Height);
            e.Graphics.DrawImage(_bmp, 0, 0, rectSrc, GraphicsUnit.Pixel);
        }

        void ScrollBar_Scroll(object sender, ScrollEventArgs e)
        {
            // スクロールされたので再描画
            this.pictureBox1.Refresh();
        }
    }
}
6月 17

編集結果をファイルに保存する

RichTextBoxの編集結果をファイルに保存するには
SaveFile 関数を利用します。

通常はテキストファイルだと思いますが
リッチテキスト(RTF)なども利用できます。
ファイルの種類は第2パラメータで指定します。

    // 第2パラメータでファイルの種類を指定します。(ここではPlainText)
    // 第2パラメータは省略可能です。その場合はASCIIテキストファイルになります。
    richTextBox1.SaveFile(@"c:\unko.txt", RichTextBoxStreamType.PlainText);


    // その他の第2パラメータの種類
    RichTextBoxStreamType.PlainText;        // テキストファイル(通常はこれ)
    RichTextBoxStreamType.RichNoOleObjs;    // OLEオブジェクトの代わりに空白を持つリッチテキスト
    RichTextBoxStreamType.RichText;         // リッチテキスト(RTF)
    RichTextBoxStreamType.TextTextOleObjs;  // OLEオブジェクトのテキスト表現を持つPlainText
    RichTextBoxStreamType.UnicodePlainText; // テキストファイル(Unicodeでエンコードされる)
6月 17

ファイルを読み込んで表示する

RichTextBoxにファイルを読み込んで表示するには
LoadFile 関数を利用します。

通常はテキストファイルだと思いますが
リッチテキスト(RTF)なども利用できます。
ファイルの種類は第2パラメータで指定します。

    // テキストファイルを読み込んで表示させます。
    // 第2パラメータでファイルの種類を指定します。(ここではPlainText)
    // 第2パラメータは省略可能です。その場合はASCIIテキストファイルになります。
    richTextBox1.LoadFile(@"c:\boot.ini", RichTextBoxStreamType.PlainText);


    // その他の第2パラメータの種類
    RichTextBoxStreamType.PlainText;        // テキストファイル(通常はこれ)
    RichTextBoxStreamType.RichNoOleObjs;    // OLEオブジェクトの代わりに空白を持つリッチテキスト
    RichTextBoxStreamType.RichText;         // リッチテキスト(RTF)
    RichTextBoxStreamType.TextTextOleObjs;  // OLEオブジェクトのテキスト表現を持つPlainText
    RichTextBoxStreamType.UnicodePlainText; // テキストファイル(Unicodeでエンコードされる)
6月 17

テキストを表示する、URLをクリッカブルにする

RichTextBoxを使うと
文字を装飾したり文字通りTextBoxよりもリッチになります。

TextBoxコントロールと同じく
Textプロパティーに文字列を設定します。

また、文字列にURLが含まれる場合は自動でクリッカブルになります。
クリックされたイベントを取得するには
LinkClickedイベントを追加します。

richtextbox

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            // リンクをクリックした際に呼ばれるイベントを追加
            richTextBox1.LinkClicked += new LinkClickedEventHandler(richTextBox1_LinkClicked);

            // 表示されるテキストを設定(URLは自動的にクリッカブルになります)
            richTextBox1.Text =
                "あいうえお\r\n" +
                "http://www.yahoo.co.jp/";
        }

        void richTextBox1_LinkClicked(object sender, LinkClickedEventArgs e)
        {
            // クリックされたリンクをブラウザで開きます
            try
            {
                System.Diagnostics.Process.Start(e.LinkText);
            }
            catch
            {
            }
        }
    }
}