windows form에서 숨겨진 패널 만들기

하고 싶은 일



가장자리에 숨겨지는 패널 만들기


환경


  • Microsoft Visual Studio Community 2019
  • Microsoft .NET Framework Ver.4.8

  • 사용할 컨트롤



    3가지만 사용
    * Panel panel1 이것이 숨기는 패널
    * Timer timer1 숨기는 애니메이션용 타이머
    * Label label1 클릭 이벤트로 닫거나 열기

    만들기



    컨트롤 배치



    form에 panel1을 배치합니다.
    [속성]
    * BackColor = "ActiveCaption"
    * Dock = "Left"

    panel1에 라벨로 닫거나 열기 위한 노브를 만듭니다.
    [속성]
    * AutoSize = "False"
    * BackColor = "ControlDarkDark"
    * Dock = "Right"
    * Font = 메리오, 12pt, style=Bold
    * ForeColor = "White"
    *text="<"
    *TextAlign="MiddleCenter"

    타이머를 설치합니다.
    [속성]
    Interval = 10 이 수치가 작을수록 움직임이 빨라집니다.

    코딩



    사용할 변수, 상수 준비

    Form1.cs
        public partial class Form1 : Form
        {
            const int PITCH = 10; // 閉じる(開く)移動幅 小さくするとなめらかになります。
            bool _is_hide = false; // 表示状況 true:非表示状態 false:表示状態
            int _hidePanelWidth; // 現在の隠れるパネルの幅
    

    Form의 Load 이벤트에서 숨겨진 패널의 현재 너비를 가져옵니다.

    Form1.cs-Form1_Load()
        private void Form1_Load(object sender, EventArgs e)
        {
            _hidePanelWidth = this.panel1.Width; // 隠れパネルの幅を取得
        }
    

    레이블의 Click 이벤트를 설명합니다.
    클릭할 때마다 타이머를 시작합니다.

    Form1.cs-Label1_Click()
            private void Label1_Click(object sender, EventArgs e)
            {
                timer1.Start(); // タイマースタート
            }
    

    타이머의 Tick 이벤트를 설명합니다.
    타이머가 시작되면 Interval에 설정된 시간(ms)마다 Tick 이벤트가 실행됩니다.

    Form1.cs-Timer1_Tick()
            private void Timer1_Tick(object sender, EventArgs e)
            {
                // 表示状況により分岐
                if (_is_hide)
                { // 閉じているとき
                    this.panel1.Width = this.panel1.Width + PITCH; // 幅をピッチ分増やす
             
             // 増加後の幅が当初の幅を超えたか 
                    if (this.panel1.Width >= _hidePanelWidth)
                    {
                        timer1.Stop(); // タイマーをストップ
                        this.panel1.Width = _hidePanelWidth; // 当初の幅に再設定
                        label1.Text = "<"; // つまみの方向を反転
                        _is_hide = false; // 表示状況を反転
                    }
                }
                else
                { // 開いているとき
                    this.panel1.Width = this.panel1.Width - PITCH; // 幅をピッチ分減らす
             
             // 減少後の幅がつまみの幅を下回った場合 
                    if (this.panel1.Width <= label1.Width)
                    {
                        timer1.Stop(); // タイマーをストップ
                        this.panel1.Width = label1.Width; // つまみ分の幅に再設定
                        label1.Text = ">"; // つまみの方向を反転
                        _is_hide = true; // 表示状況を反転
                    }
                }
            }
    

    이것으로, 이런 느낌이 됩니다.


    조금 지루하지 않기 때문에 버튼으로도 넣어 보겠습니다 ...
    아!


    버튼의 가장자리가 남아 있습니다.
    숨겨진 패널 안에 배치한 컨트롤은 Anchor 를 "Top, Right"로 하는 것으로 해결할 수 있습니다.

    제대로 버튼도 숨겼습니다.

    좋은 웹페이지 즐겨찾기