C#でタブページを追加削除する

作成日:2018.11.29
  1. HOME
  2. 趣味のページ
  3. C#でタブページを追加削除する

このページを含め、自分のサイトを作る際にはC#で作った自作のHTMLエディタを使っていました。自作ですから自分流にアレンジし、タグごとにハイライトで色分けして理解しやすくしたり、よく使うタグを簡単に入力できるようにしています。

そんなHTMLエディタですが、なんとHDDの故障でソースコードが消滅してしまいました。。。ソフト本体はバックアップしていたので今でも使えますが、今後修正したいと思ってもそれができません。

そのような訳でまた空いた時間にポチポチと作り直そうと思うのですが(作り直しました)、備忘録的な意味で制作過程上必要な処理をここに残しておこうかなと思いました。日曜プログラマなのであまり参考にはならないかも知れませんが、宜しければアイデアの足しにしてください。

タブページの追加

まずは下図のようにtabControlとボタンを2つ設置しました。

タブの追加削除のフォーム

tabControlのtabPagesプロパティで、タブページを削除しています。ボタンのテキストは図のように変更しました。

まずはタブの追加の方法ですが、次のようなコードです。

int cnt = 1; //ボタンのクリックイベント外で宣言したグローバル変数

//以下button1のクリックイベント内
string title = "page" + cnt.ToString();
TabPage newtab = new TabPage()
{
	Name = title,
	Text = title
};
tabControl1.TabPages.Add(newtab);
tabControl1.SelectedIndex = tabControl1.TabCount - 1;
cnt++;

上記のコードの説明です。

int cnt = 1;

最初のグローバル変数は、タブのタイトルに使う通し番号のための変数です。下図のように「page」の後に数字が付いていると思います。

タブの通し番号

タブページの数を取得して用いてもいいのですが、タブページを削除できるようにすると色々不具合が生じます(タブを3つ作って、page1タブとpage3タブを削除し、新たにタブを作ると「page2」という名前を持つタブが2つできてしまいます)。ですからタブ数ではなく、通し番号を用いなければなりません。

string title = "page" + cnt.ToString();

文字列変数titleに、「page」+通し番号を代入しています。この値をタブページのタイトルやタブページの名前に使うことにします。

TabPage newtab = new TabPage()
{
	Name = title,
	Text = title
};

new TabPage()でタブページ(newtab)を作成します。

ページの名前(Nameプロパティ)とタイトル(Textプロパティ)には先ほどの変数titleを指定しています。新しいコントロールのプロパティは中カッコ{}内で指定していきます(プロパティとプロパティの区切りはコンマです)。中カッコを閉じた後のセミコロンを忘れないように付けます。

tabControl1.TabPages.Add(newtab);

Add(TabPage)でtabControl1にタブページnewtabを追加します。

これでタブが追加されますが、このままでは現在のタブにフォーカスが置かれたままです。できれば新しく作ったタブにフォーカスを移したいと思います。

tabControl1.SelectedIndex = tabControl1.TabCount - 1;

タブコントロールの選択タブページ番号(selectedIndex)を、総タブページ数(TabCount)-1にして、一番新しいタブを指定します。これで新しいタブが選択された状態になります。

selectedIndexは0から数え始めますが、TabCountは1から数え始めます(タブページが3つある場合、一番最後のページは、selectedIndexでは2、一方TabCountでは3となります)。したがって、TabCount -1 としています。

cnt++;

最後に、通し番号の入ったグローバル変数cntを+1にしておきます。次にタブページを作成するときには、この数値がページタイトルに使われることになる訳です。


これがタブを追加する基本的なコードです。

タブの削除

タブを削除するには、以下のようにします。

//button2のクリックイベントに記入
if (tabControl1.TabCount > 1)
{
	tabControl1.TabPages.Remove(tabControl1.SelectedTab);
}

上記コードの説明です。

if (tabControl1.TabCount > 1){処理}

まずはif文を使って、タブ数が2以上の時のみタブを削除するようにします。 そうすることでタブの数が0になったり、タブが無いのにタブを削除するコードが実行されてエラーになったりするのを防ぐことができます。

tabControl1.TabPages.Remove(tabControl1.SelectedTab);

Remove(TabPage)でタブコントロールからタブページを削除します。削除するタブは、現在選択されているタブ(SelectedTab)ということになります。


次回はタブページにRichTextBoxを乗せる方法を書いてみます。