[.Net] C# WinForm์์ ์ฌ๋ผ์ด๋ฉ ๋ฉ๋ด(Sliding menu), ์ฌ์ด๋๋ฐ(Sidebar) ์ฝ๊ฒ ๋ง๋ค๊ธฐ (์์ ํฌํจ)
์ฌ๋ผ์ด๋ฉ ๋ฉ๋ด(Sliding menu) / ์ฌ์ด๋๋ฐ(Sidebar)๋?
์ฌ์ด๋ ๋ฐ(Sidebar)๋ ์ฃผ๋ก ์น ํ์ด์ง๋ ์ค๋งํธํฐ ์ดํ์์ ๋ง์ด ๋ณด์์ ๊ฒ๋๋ค. ์ข์ธก/์ฐ์ธก์ ํน์ ๋ฒํผ์ ๋๋ฅด๋ฉด ๋ฉ๋ด๊ฐ ํ์๋๊ณ , ํน์ ๋ฒํผ์ ํด๋ฆญํ๋ฉด ๋ค์ ๋ฉ๋ด๊ฐ ์ฌ๋ผ์ง๋ ํํ์ ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ด๋ฌํ ์ฌ์ด๋๋ฐ ๋ฉ๋ด๊ฐ ๋ฏธ๋๋ฌ์ง๋ฏ์ด ๋ํ๋๊ณ ์ฌ๋ผ์ง๋ฉด ์ฌ๋ผ์ด๋ฉ ๋ฉ๋ด(Sliding menu)๋ผ๊ณ ๋ ํฉ๋๋ค.
์ ํฐ์คํ ๋ฆฌ ๋ธ๋ก๊ทธ์๋ ์ด๋ฌํ ์ฌ์ด๋ ๋ฐ๊ฐ ์์ต๋๋ค. ๋ฉ๋ด ์์ด์ฝ์ ํด๋ฆญํ๋ฉด ์ฌ์ด๋์ ์๋ ๋ฉ๋ด๊ฐ ๋ํ๋๊ณ , ๋ค์ ์ฌ๋ผ์ง๋ ๋์์ ๋ณด์ฌ์ค๋๋ค.
C#์์ ๋ง๋ ์ฌ๋ผ์ด๋ฉ ๋ฉ๋ด ๋์
C#์ MFC๋ณด๋ค UI ์์ ํ๊ธฐ๊ฐ ์ ๋ง ์ ๋ง ํธ๋ฆฌํฉ๋๋ค. ๊ทธ๋์ ์ ์ด๋ ๊ฒ MFC๋ฅผ ๊ณ ์งํ๋ ์ถ์ ์ ๋์ ๋๋ค. ์๋ฌดํผ, ์ด๋ ๊ฒ ํธํ C#์์๋ ์์ฝ์ง๋ง ์ฌ์ด๋ ๋ฐ๋ ์ฌ๋ผ์ด๋ฉ ๋ฉ๋ด ์ปจํธ๋กค์ ์์ต๋๋ค.
์ ๊ณต๋๋ ์ปจํธ๋กค์ด ์์ด ์ง์ ๋ง๋ค์ด์ผ ํ์ง๋ง, ๋๋ฌด๋๋ ๊ฐ๋จํ๊ฒ ๋ง๋ค ์ ์์ต๋๋ค. ์๋ ์ ๋๋ฉ์ด์ ์ ๋ณธ ํฌ์คํ ์์ ๋ค๋ฃฐ ์์ ์ฝ๋์ ๋์์ ๋๋ค.
C#์์ ์ฌ๋ผ์ด๋ฉ ๋ฉ๋ด ๋ง๋ค๊ธฐ
๊ทธ๋ผ ๋ณธ๊ฒฉ์ ์ผ๋ก ๋ง๋ค์ด ๋ณด๊ฒ ์ต๋๋ค. ExamSlidingMenu
๋ผ๋ ์ด๋ฆ์ WinForm ํ๋ก์ ํธ
๋ฅผ ์์ฑํฉ๋๋ค.
Form์ Panel์ ์ถ๊ฐํ๊ณ , Dock ์ค์ ์ Left๋ก ๋ณ๊ฒฝํฉ๋๋ค. ๊ฐ๋ก ํญ์ 200์ด๊ณ , ์ด๋ฆ์ panelSideMenu
์
๋๋ค. ์ด ํจ๋์ ๋ฉ๋ด ๋ฒํผ์ ์ถ๊ฐํ ๊ฒ๋๋ค. ๊ทธ๋ฆฌ๊ณ ํจ๋์ด ๋ณด์๋ค ์ ํ๋ค ํ๋ ๊ฒ์ด์ฃ .
๋ณ๊ฒฝํ ์์ฑ์ ์๋ ํ๋ฅผ ์ฐธ๊ณ ํ์ธ์.
ํญ๋ชฉ | ๊ฐ |
Name | panelSideMenu |
Dock | Left |
Size(Width) | 200 |
BackColor | 64, 64, 64 |
์ด์ Button
์ ์ถ๊ฐํฉ๋๋ค. ํจ๋์ ์ถ๊ฐ๋๋ ๋ฒํผ์ ์ฌ๋ผ์ด๋ฉ ๋ฉ๋ด์ ๋ฉ๋ด ๋ฒํผ์ ์๋ฏธํฉ๋๋ค. ๊ทธ๋ฆผ ์๋์ ์๋ ํ์ ๊ฐ์ด ์์ฑ์ ๋ณ๊ฒฝํ๋ฉด, ์๋ ๊ทธ๋ฆผ์ฒ๋ผ ๋ฒํผ์ด ๊พธ๋ฉฐ์ง๋๋ค.
ํญ๋ชฉ | ๊ฐ |
Name | button1 |
Dock | Top |
Size | 200, 50 |
BackColor | 64, 64, 64 |
FlatStyle | Flat |
BorderSize | 0 |
MouseDownBackColor | 60, 60, 60 |
MouseOverBackColor | 70, 70, 70 |
ForeColor | White |
Text | ๋ฒํผ1 |
๋์ผํ ๋ฒํผ์ ๋ณต์ฌํ์ฌ ๋ถ์ฌ ๋ฃ์ผ๋ฉด ์ฌ๋ฌ ๊ฐ์ ๋ฉ๋ด ๋ฒํผ์ด ์์ฑ๋ฉ๋๋ค.
์ด๋ฒ์๋ CheckBox
๋ฅผ ์ถ๊ฐํฉ๋๋ค. ์ฒดํฌ ๋ฐ์ค ๋ฒํผ์ ํด๋ฆญํ๋ฉด ๋ฉ๋ด๊ฐ ์ ํ๊ฑฐ๋ ๋ณด์ฌ์ฃผ๋ ๋์์ ํ๊ฒ ๋ฉ๋๋ค.
ํญ๋ชฉ | ๊ฐ |
Name | checkBoxHide |
AutoSize | False |
Dock | Bottom |
Size | 200, 50 |
Appearance | Button |
BackColor | 64, 64, 64 |
FlatStyle | Flat |
BorderSize | 0 |
MouseDownBackColor | 60, 60, 60 |
MouseOverBackColor | 70, 70, 70 |
ForeColor | White |
Text | < |
TextAlign | Middlecenter |
์ฌ๊ธฐ๊น์ง UI๋ฅผ ์ ์ฉํ๋ค๋ฉด ์๋์ ๊ฐ์ ๋ชจ์ต์ผ ๊ฒ์ ๋๋ค.
๋ง์ง๋ง์ผ๋ก Timer
๋ฅผ ์ถ๊ฐํฉ๋๋ค. ์ฌ๋ผ์ด๋ฉ ๋ฉ๋ด๊ฐ ์์ํ ์ ํ๊ณ , ๋ณด์ด๋ ๋์์ ํ์ด๋จธ์์ ์ด๋ค์ง๊ฒ ๋ฉ๋๋ค.
ํญ๋ชฉ | ๊ฐ |
Name | timerSliding |
Interval | 10 |
์ด์ ์ฝ๋๋ฅผ ์๋์ ๊ฐ์ด ์ถ๊ฐํฉ๋๋ค.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace ExamSlidingMenu
{
public partial class Form1 : Form
{
//์ฌ๋ผ์ด๋ฉ ๋ฉ๋ด์ ์ต๋, ์ต์ ํญ ํฌ๊ธฐ
const int MAX_SLIDING_WIDTH = 200;
const int MIN_SLIDING_WIDTH = 50;
//์ฌ๋ผ์ด๋ฉ ๋ฉ๋ด๊ฐ ๋ณด์ด๋/์ ํ๋ ์๋ ์กฐ์
const int STEP_SLIDING = 10;
//์ต์ด ์ฌ๋ผ์ด๋ฉ ๋ฉ๋ด ํฌ๊ธฐ
int _posSliding = 200;
public Form1()
{
InitializeComponent();
}
private void checkBoxHide_CheckedChanged(object sender, EventArgs e)
{
if (checkBoxHide.Checked == true)
{
//์ฌ๋ผ์ด๋ฉ ๋ฉ๋ด๊ฐ ์ ํ์ ๋, ๋ฉ๋ด ๋ฒํผ์ ํ์
button1.Text = "1";
button2.Text = "2";
checkBoxHide.Text = ">";
}
else
{
//์ฌ๋ผ์ด๋ฉ ๋ฉ๋ด๊ฐ ๋ณด์์ ๋, ๋ฉ๋ด ๋ฒํผ์ ํ์
button1.Text = "๋ฒํผ1";
button2.Text = "๋ฒํผ2";
checkBoxHide.Text = "<";
}
//ํ์ด๋จธ ์์
timerSliding.Start();
}
private void timerSliding_Tick(object sender, EventArgs e)
{
if (checkBoxHide.Checked == true)
{
//์ฌ๋ผ์ด๋ฉ ๋ฉ๋ด๋ฅผ ์จ๊ธฐ๋ ๋์
_posSliding -= STEP_SLIDING;
if (_posSliding <= MIN_SLIDING_WIDTH)
timerSliding.Stop();
}
else
{
//์ฌ๋ผ์ด๋ฉ ๋ฉ๋ด๋ฅผ ๋ณด์ด๋ ๋์
_posSliding += STEP_SLIDING;
if (_posSliding >= MAX_SLIDING_WIDTH)
timerSliding.Stop();
}
panelSideMenu.Width = _posSliding;
}
}
}
์ฒดํฌ ๋ฐ์ค์ ์ด๋ฒคํธ์ ํ์ด๋จธ์ ์ด๋ฒคํธ๋ฅผ ์ถ๊ฐํ๋ ๋ฐฉ๋ฒ์ ๊ฐ๋จํ๋ฏ๋ก ์๋ตํ์ต๋๋ค. ๊ฐ๋จํ๊ฒ ๊ฐ ์ปจํธ๋กค์ ๋๋ธ ํด๋ฆญํ๋ฉด checkboxHide_CheckedChanged()
์ timerSliding_Tick()
์ด๋ฒคํธ ํจ์๊ฐ ์ถ๊ฐ๋ฉ๋๋ค.
์ฝ๋๊ฐ ๊ฐ๋จํ์ง๋ง ๋์์ ์ค๋ช
ํ๊ฒ ์ต๋๋ค.
โ 28๋ฒ ๋ผ์ธ์ checkBoxHide_CheckedChanged()
์ด๋ฒคํธ๊ฐ ๋ฐ์ํ์ ๋ ์ฒดํฌ ๋ฐ์ค์ ์ํ๋ฅผ ํ์ธํฉ๋๋ค.
โก ์ฒดํฌ ๋ฐ์ค์ ์ํ์ ๋ฐ๋ผ ํ
์คํธ๋ฅผ ๋ณ๊ฒฝํฉ๋๋ค(30๋ฒ ๋ผ์ธ). ์ข ๋ ์์ฉํ๋ฉด, ์ฌ๊ธฐ์ ์์ด์ฝ์ ์ถ๊ฐํ์ฌ ๋ ์์๊ฒ ๊พธ๋ฐ ์ ์์ต๋๋ค.
โข ๊ทธ๋ฆฌ๊ณ 45๋ฒ ๋ผ์ธ์ด ํธ์ถ๋์ด timerSliding
์ ์์ํฉ๋๋ค.
โฃ 49๋ฒ ๋ผ์ธ์ timerSliding_Tick()
ํ์ด๋จธ ํจ์๊ฐ ํธ์ถ๋ฉ๋๋ค.
โค 51๋ฒ ๋ผ์ธ์์ ์ฒดํฌ ๋ฐ์ค์ ์ํ๋ฅผ ํ์ธํฉ๋๋ค.
โฅ ์ฒดํฌ ์ํ์ ๋ฐ๋ผ _posSliding
๋ฅผ STEP_SLIDING
๋งํผ ์ฆ๊ฐํ๊ณ , panelSideMenu
์ ํญ์ผ๋ก ์ค์ ํฉ๋๋ค. ์ด ๋์์ MIN_SLIDING_WIDTH
, MAX_SLIDING_WIDTH
๋งํผ ์คํ๋ฉ๋๋ค.
๋ง์ฝ, ์ฌ๋ผ์ด๋ฉ ๋ฉ๋ด๋ฅผ ์ฒ์ฒํ ๋์ํ๊ณ ์ถ๋ค๋ฉด STEP_SLIDING
๊ฐ์ ์ค์ด๋ฉด ๋ฉ๋๋ค. ๋ฐ๋๋ก ๋น ๋ฅด๊ฒ ๋์ํ๋ ค๋ฉด ๊ฐ์ ๋๋ฆฌ๋ฉด ๋ฉ๋๋ค.
์ โก๋ฒ์์ ์ธ๊ธํ ๊ฒ์ฒ๋ผ, ์ด๋ฏธ์ง๋ฅผ ๋ฃ์ผ๋ฉด ์ฌ์ด๋ ๋ฐ๊ฐ ์ ํ์ ๋ ๋ฉ๋ด ๋ฒํผ์ ์์ด์ฝ์ผ๋ก ํํํ ์ ์์ต๋๋ค. ๊ฐ ๋ฉ๋ด๋ฅผ ์ข ๋ ์ง๊ด์ ์ผ๋ก ํํํ ์ ์๊ฒ ์ฃ ?
์์ธํ ์ฝ๋ ์ฌ์ฉ ๋ฐฉ๋ฒ์ ์๋ ์ฒจ๋ถ๋ ์์ ์ฝ๋๋ฅผ ์ฐธ๊ณ ํ์ธ์.
'Programming > .Net' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋๊ธ
์ด ๊ธ ๊ณต์ ํ๊ธฐ
-
๊ตฌ๋
ํ๊ธฐ
๊ตฌ๋ ํ๊ธฐ
-
์นด์นด์คํก
์นด์นด์คํก
-
๋ผ์ธ
๋ผ์ธ
-
ํธ์ํฐ
ํธ์ํฐ
-
Facebook
Facebook
-
์นด์นด์ค์คํ ๋ฆฌ
์นด์นด์ค์คํ ๋ฆฌ
-
๋ฐด๋
๋ฐด๋
-
๋ค์ด๋ฒ ๋ธ๋ก๊ทธ
๋ค์ด๋ฒ ๋ธ๋ก๊ทธ
-
Pocket
Pocket
-
Evernote
Evernote
๋ค๋ฅธ ๊ธ
-
[.Net] WPF NodeNetwork ๊ธฐ๋ณธ ๊ฐ๋ ๊ณผ ํน์ง ์์๋ณด๊ธฐ
[.Net] WPF NodeNetwork ๊ธฐ๋ณธ ๊ฐ๋ ๊ณผ ํน์ง ์์๋ณด๊ธฐ
2021.12.18 -
[.Net] Node Editor UI ํ๋ ์์ํฌ ์๊ฐ - NodeNetwork
[.Net] Node Editor UI ํ๋ ์์ํฌ ์๊ฐ - NodeNetwork
2021.11.28 -
[.Net] C#์์ CefSharp์ผ๋ก ํฌ๋กฌ ๋ธ๋ผ์ฐ์ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ (์์ ํฌํจ)
[.Net] C#์์ CefSharp์ผ๋ก ํฌ๋กฌ ๋ธ๋ผ์ฐ์ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ (์์ ํฌํจ)
2021.09.11 -
[.Net] C#์์ JPEG, PNG๋ฅผ WebP๋ก ๋ณํํ๋ ๋ฐฉ๋ฒ (์์ ํฌํจ)
[.Net] C#์์ JPEG, PNG๋ฅผ WebP๋ก ๋ณํํ๋ ๋ฐฉ๋ฒ (์์ ํฌํจ)
2021.08.30