splitcontainerのタブ化について

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
アバター
kazuoni
記事: 17
登録日時: 14年前
住所: 愛知
連絡を取る:

splitcontainerのタブ化について

#1

投稿記事 by kazuoni » 11年前

お久しぶりです。kazuoniです。

現在なんとなくwindowsフォームのsplitcontainerをいじっていまして、
どうしたものかと悩んだので質問させていただきます。

現在、splitcontainerのspliterに図形や文字を表示したいと考えております。
以下に示すコードは実行開始時やspliterを大きく動かす分には問題なく動作します。
しかし、spliterを微小区間移動させるとspliterに描写されている図形が崩れます。(パッと見、隠れてる?)
どのような解決策があるのでしょうか。
ご回答よろしくお願いいたします。

問題のコードは以下になります。spliterWidth = 40として実行しております。
splitcontainerのspliterをタブ化する記事を参考にしました。(パクリました。)
http://blog.syo-ko.com/?eid=1249

コード:

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

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        /// <summary>タブの短辺(長辺-短辺の長さ)</summary>
        private Int32 SplitTabShortHeight = 24;
        /// <summary>タブの長辺</summary>
        private Int32 SplitTabLongHeight = 144;
        /// <summary>タブの幅</summary>
        private Int32 SplitTabWidth = 24;
        /// <summary>タブの基本図形</summary>
        private Point[] SplitTab;

        public Form1()
        {
            SplitTab = new Point[4];
            SplitTab[0] = new Point(0, SplitTabShortHeight);
            SplitTab[1] = new Point(SplitTabWidth, 0);
            SplitTab[2] = new Point(SplitTabWidth, SplitTabLongHeight);
            SplitTab[3] = new Point(0, SplitTabLongHeight - SplitTabShortHeight);
            InitializeComponent();
        }
        
        private void splitContainer1_Paint(object sender, PaintEventArgs e)
        {
            
            //SplitContainer
            SplitContainer CtrlSplit = (SplitContainer)sender;

            //描画位置
            Point dOffSet = new Point(CtrlSplit.SplitterDistance, (CtrlSplit.Height - SplitTabLongHeight) / 2);
            //描画タブ
            Point[] dTab = null;
            
            //タブを描画位置へシフト
            dTab = new Point[] {
		        new Point(SplitTab[0].X + dOffSet.X, SplitTab[0].Y + dOffSet.Y),
		        new Point(SplitTab[1].X + dOffSet.X, SplitTab[1].Y + dOffSet.Y),
		        new Point(SplitTab[2].X + dOffSet.X, SplitTab[2].Y + dOffSet.Y),
		        new Point(SplitTab[3].X + dOffSet.X, SplitTab[3].Y + dOffSet.Y)
            };

            //描画
            e.Graphics.FillPolygon(Brushes.Gray, dTab);
        }
    }
}

“C言語何でも質問掲示板” へ戻る