제 티스토리를 가만히 보면 아래 글이 조회며 유입이 제일 많습니다.
https://gameprograming.tistory.com/3?category=493568
저게 c#을 처음 독학하기 시작했을때 대학 동아리에 제출하려고 그냥 생각나는대로 만들었던거 같은데
이렇게 오랫동안 제 티스토리에 조회수를 먹여줄거라고는 생각도 못 했습니다.
아무튼 이번에는 저때보다 더 간단하고 쉽게 만들어보려합니다.
일단 기본적인 디자인을 합시다.
디자인은 저보다 여러분들이 더 잘하실거라 생각합니다.
그 다음 타이머를 하나 추가합니다.
이 타이머는 현재 시간을 나타내기 위해 사용할겁니다.
인터벌(Interval)값은 1000이 1초인거 아시죠. 1초마다 타이머의 내용이 작동할겁니다.
그 다음 소스입니다.
namespace WindowsFormsApp1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
Timer_tick.Enabled = true;
}
private void Timer_tick_Tick(object sender, EventArgs e)
{
lbl_realtime.Text = "현재 시각 : " + DateTime.Now.ToLongTimeString();
}
}
}
폼이 로드되면 Timer_tick의 Enabled값을 true로 설정해줍니다.
그리고 Timer_tick에 설정한 인터벌값(1초)가 될때마다 현재 시간을 갱신해주는거죠.
사실 Timer_tick의 Enabled값을 true로 설정하는건 디자인 단계에서 해도 됩니다.
이 타이머는 프로그램이 실행되고 있는 동안 계속해서 동작하기위한 타이머니까요.
위와 같이 설정하면 소스는 길어질 필요도 없습니다.
namespace WindowsFormsApp1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Timer_tick_Tick(object sender, EventArgs e)
{
lbl_realtime.Text = "현재 시각 : " + DateTime.Now.ToLongTimeString();
}
}
}
위처럼만 작성해도 동작은 똑같습니다.
시간 설정은 여러분이 더 나은 로직을 꾸밀 수 있을거라 생각하고
음악파일을 가져 올 openFileDialog부터 사용하겠습니다.
좌측에 있는 openFileDialog를 추가합니다.
저는 편의상 ofd_music로 이름을 변경했습니다.
FileName에 있는 openFileDialog1을 빈칸으로 놔두고
필터를 설정해줍니다
(*.wav)|*wav|모든 파일 (*.*)|*.*
이제 불러오기 버튼을 누르면 음악파일을 선택하여 텍스트박스에 보여주게 합시다.
private void Btn_music_load_Click(object sender, EventArgs e)
{
String file_path = null;
ofd_music.InitialDirectory = "C:\\"; // 기본 경로 설정
if(ofd_music.ShowDialog() == DialogResult.OK) // 다이얼로그에서 OK를 눌렀을 때
{
file_path = ofd_music.FileName;
txtBox_music.Text = file_path.Split('\\')[file_path.Split('\\').Length - 1];
// 경로를 지우고 파일이름과 확장자명만 보여줄 때
txtBox_music.Text += "\r\n" + file_path;
// 경로부터 파일이름과 확장자까지 다 보여줄 때
}
}
저는 따로 가지고 있던 효과음을 추가했습니다.
파일이름과 확장자만 보이게만 했습니다.
파일을 불러왔으면 재생을 해봐야겠지요.
wav파일을 사용한다면 SoundPlayer로 충분합니다.
private void btn_music_play_Click(object sender, EventArgs e)
{
SoundPlayer sp = new SoundPlayer(file_path);
sp.Play();
}
그리고 정지도 넣어야겠지요.
private void btn_music_stop_Click(object sender, EventArgs e)
{
SoundPlayer sp = new SoundPlayer(file_path);
sp.Stop();
}
이렇게만 해도 되네요.
소스 전문
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;
using System.Media;
namespace WindowsFormsApp1
{
public partial class Form1 : Form
{
Boolean setting = false;
String file_path = null;
int hour;
int min;
int sec;
int time=0;
public Form1()
{
InitializeComponent();
}
private void Timer_tick_Tick(object sender, EventArgs e)
{
lbl_realtime.Text = "현재 시각 : " + DateTime.Now.ToLongTimeString();
if(setting == true)
{
time -= 1;
label6.Text = "알람까지 " + time + "초 남았습니다";
if (time <= 0)
{
setting = false;
radioButton1.Enabled = true;
radioButton2.Enabled = true;
button1.Visible = true;
time = 0;
MessageBox.Show("알람이 울립니다.");
}
}
}
private void Btn_music_load_Click(object sender, EventArgs e)
{
ofd_music.InitialDirectory = "C:\\";
if(ofd_music.ShowDialog() == DialogResult.OK)
{
file_path = ofd_music.FileName;
txtBox_music.Text = file_path.Split('\\')[file_path.Split('\\').Length - 1];
}
}
private void btn_music_play_Click(object sender, EventArgs e)
{
SoundPlayer sp = new SoundPlayer(file_path);
sp.Play();
}
private void btn_music_stop_Click(object sender, EventArgs e)
{
SoundPlayer sp = new SoundPlayer(file_path);
sp.Stop();
}
private void radioButton1_CheckedChanged(object sender, EventArgs e)
{
if (radioButton1.Checked == true)
{
numericUpDown3.Visible = false;
label3.Visible = false;
}
}
private void radioButton2_CheckedChanged(object sender, EventArgs e)
{
if (radioButton2.Checked == true)
{
numericUpDown3.Visible = true;
label3.Visible = true;
}
}
private void button1_Click(object sender, EventArgs e)
{
if (radioButton1.Checked == true) // 알람 버튼이 선택
{
hour = (int)numericUpDown1.Value;
min = (int)numericUpDown2.Value;
for (; hour >= 1; hour--)
{
time += 3600;
}
for (; min >= 1; min--)
{
time += 60;
}
radioButton1.Enabled = false;
radioButton2.Enabled = false;
button1.Visible = false;
setting = true;
}
if (radioButton2.Checked == true) // 타이머 버튼 선택
{
hour = (int)numericUpDown1.Value;
min = (int)numericUpDown2.Value;
sec = (int)numericUpDown3.Value;
for (; hour >= 1; hour--)
{
time += 3600;
}
for (; min >= 1; min--)
{
time += 60;
}
for (; sec >= 1; sec--)
{
time += 1;
}
radioButton1.Enabled = false;
radioButton2.Enabled = false;
button1.Visible = false;
setting = true;
}
}
}
}
시간 설정에 대한 로직이나 그 외에 메시지박스나 툴팁, 트레이아이콘 전환등등..
모든것들을 예전에 작성했던 글에 있는 소스들을 그대로 가지고 왔습니다.
아래에서 필요한 부분만 파악하시면 될겁니다.
아래 소스 원본 파일이 없어서 보여드리지 못해 아쉽네요..
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Media;
namespace Alram
{
public partial class Alram_Main : Form
{
bool bool_setting = false
int int_SettingTime_Hour, int_SettingTime_Minute;
public Alram_Main()
{
InitializeComponent();
}
private void Alram_Main_Load(object sender, EventArgs e)
{
// 폼이 실행되자마자 시간을 띄우기 위해 사용
lbl_realtime.Text = "현재시각 : " + DateTime.Now.ToLongTimeString();
timer_realtime.Enabled = true
}
private void timer1_Tick(object sender, EventArgs e)
{
// 지정된 시간(1초)가 지날때마다 시작되는 이벤트
lbl_realtime.Text = "현재시각 : " + DateTime.Now.ToLongTimeString();
}
private void btn_timesetting_Click(object sender, EventArgs e) // 시간 설정 버튼
{
if (rb_time_type_time.Checked == false) // 라디오버튼 체크
{
if (bool_setting == true) // 이미 설정한 값이 있는지
{
if (DialogResult.OK == MessageBox.Show("이미 알람이 설정 되어 있습니다만 취소하고 다시 설정하시겠습니까?", "경고", MessageBoxButtons.OKCancel))
{
// 메시지박스를 띄우고 OK버튼을 누르면
int int_SettingTime_Total = 0;
for (int int_SettingHour_Temp = (int)setting_hour.Value; int_SettingHour_Temp >= 1; int_SettingHour_Temp--)
{
//시간 설정
int_SettingTime_Total += 60;
}
int_SettingTime_Total = int_SettingTime_Total + ((int)setting_minute.Value * 60000);
timer_settingtime.Interval = int_SettingTime_Total;
timer_settingtime.Enabled = true
MessageBox.Show("앞으로 " + setting_hour.Value + "시간 " + setting_minute.Value + "분 후에 알람이 울립니다.", "알림");
}
}
else // 설정한 값이 없을경우
{
bool_setting = true
int int_SettingTime_Total = 0;
for (int int_SettingHour_Temp = (int)setting_hour.Value; int_SettingHour_Temp >= 1; int_SettingHour_Temp--)
{
int_SettingTime_Total += 60;
}
int_SettingTime_Total = int_SettingTime_Total + ((int)setting_minute.Value * 60000);
timer_settingtime.Interval = int_SettingTime_Total;
timer_settingtime.Enabled = true
MessageBox.Show("앞으로 " + setting_hour.Value + "시간 " + setting_minute.Value + "분 후에 알람이 울립니다.", "알림");
}
}
else // 라디오 버튼 체크
{
if (bool_setting == true)
{
if (DialogResult.OK == MessageBox.Show("이미 알람이 설정 되어 있습니다만 취소하고 다시 설정하시겠습니까?", "경고", MessageBoxButtons.OKCancel))
{
if (rb_pm.Checked == true)
{
int_SettingTime_Hour = (int)setting_hour.Value + 12;
int_SettingTime_Minute = (int)setting_minute.Value;
timer_settingtime.Interval = 1000;
timer_settingtime.Enabled = true
MessageBox.Show(setting_hour.Value + "시 " + setting_minute.Value + "분에 알람이 울립니다.", "알림");
}
else
{
int_SettingTime_Hour = (int)setting_hour.Value;
int_SettingTime_Minute = (int)setting_minute.Value;
timer_settingtime.Interval = 1000;
timer_settingtime.Enabled = true
MessageBox.Show(setting_hour.Value + "시 " + setting_minute.Value + "분에 알람이 울립니다.", "알림");
}
}
}
else
{
bool_setting = true
if (rb_pm.Checked == true)
{
int_SettingTime_Hour = (int)setting_hour.Value + 12;
int_SettingTime_Minute = (int)setting_minute.Value;
timer_settingtime.Interval = 1000;
timer_settingtime.Enabled = true
MessageBox.Show(setting_hour.Value + "시 " + setting_minute.Value + "분에 알람이 울립니다.", "알림");
}
else
{
int_SettingTime_Hour = (int)setting_hour.Value;
int_SettingTime_Minute = (int)setting_minute.Value;
timer_settingtime.Interval = 1000;
timer_settingtime.Enabled = true
MessageBox.Show(setting_hour.Value + "시 " + setting_minute.Value + "분에 알람이 울립니다.", "알림");
}
}
}
}
private void timer_settingtime_Tick(object sender, EventArgs e)
{
// 지정한 시간이 다 되었을때.
if (rb_time_type_time.Checked == false)
{
SoundPlayer sp = new SoundPlayer();
sp.SoundLocation = txt_soundname.Text;
if (txt_soundname.Text == "Default")
{
Console.Beep();
bool_setting = false
timer_settingtime.Enabled = false
}
else
{
sp.Play();
bool_setting = false
timer_settingtime.Enabled = false
}
if (DialogResult.OK == MessageBox.Show("지정한 시간이 되었습니다.", "알림", MessageBoxButtons.OK))
{
sp.Stop();
}
}
else
{
if (DateTime.Now.Hour == int_SettingTime_Hour && DateTime.Now.Minute == int_SettingTime_Minute)
{
SoundPlayer sp = new SoundPlayer();
sp.SoundLocation = txt_soundname.Text;
if (txt_soundname.Text == "Default")
{
Console.Beep();
bool_setting = false
timer_settingtime.Enabled = false
}
else
{
sp.Play();
bool_setting = false
timer_settingtime.Enabled = false
}
if (DialogResult.OK == MessageBox.Show("지정한 시간이 되었습니다.", "알림", MessageBoxButtons.OK))
{
sp.Stop();
}
}
}
}
private void btn_soundselect_Click(object sender, EventArgs e)
{
// 사운드 파일 설정
OpenFileDialog ofd = new OpenFileDialog();
ofd.Filter = ("wav파일 | *.wav");
ofd.ShowDialog();
string openfile_name = ofd.FileName;
SoundPlayer sp = new SoundPlayer();
if (openfile_name != "")
{
sp.SoundLocation = openfile_name;
txt_soundname.Text = openfile_name;
}
}
private void btn_sound_previewstart_Click(object sender, EventArgs e)
{
// 미리듣기
SoundPlayer sp = new SoundPlayer();
sp.SoundLocation = txt_soundname.Text;
if (sp.SoundLocation == "Default")
Console.Beep();
else
sp.Play();
}
private void btn_sound_previewstop_Click(object sender, EventArgs e)
{
// 미리듣기 중지
SoundPlayer sp = new SoundPlayer();
sp.Stop();
}
private void Alram_Main_FormClosing(object sender, FormClosingEventArgs e)
{
// 닫기를 실행했을때
e.Cancel = true
if (DialogResult.OK == MessageBox.Show("종료 하시겠습니까?(종료하지 않으면 트레이 아이콘으로 내려갑니다.)", "경고", MessageBoxButtons.OKCancel))
{
// 메시지박스를 띄우고 OK를 누르면 종료
this.Dispose();
this.Close();
}
else
{
// 메시지박스에서 Cancel을 누르면 트레이 아이콘으로 숨김
this.Visible = false
trayicon.Visible = true
}
}
private void Alram_Main_MinimumSizeChanged(object sender, EventArgs e)
{
this.Visible = false
trayicon.Visible = true
}
private void trayicon_DoubleClick(object sender, EventArgs e)
{
if (this.Visible == false)
{
this.Visible = true
trayicon.Visible = false
}
}
private void rb_time_type_time_CheckedChanged(object sender, EventArgs e)
{ // 라디오버튼 변경시 설정 변경
if (rb_time_type_time.Checked == true)
{
setting_hour.Maximum = 12;
groupBox3.Visible = true
rb_am.Visible = true
rb_pm.Visible = true
lbl_hour.Text = "시"
}
else
{
lbl_hour.Text = "시간"
groupBox3.Visible = false
rb_am.Visible = false
rb_pm.Visible = false
}
}
private void rb_time_type_future_MouseEnter(object sender, EventArgs e)
{ // 마우스가 라디오버튼 위에 올라가면 툴팁(말풍선)으로 설명
toolTip_Alram_Type1.ToolTipTitle = "Type1 설명"
toolTip_Alram_Type1.ToolTipIcon = ToolTipIcon.Info;
toolTip_Alram_Type1.IsBalloon = true
toolTip_Alram_Type1.ShowAlways = true
}
private void rb_time_type_time_MouseEnter(object sender, EventArgs e)
{ // 마우스가 라디오버튼 위에 올라가면 툴팁(말풍선)으로 설명
toolTip_Alram_Type2.ToolTipTitle = "Type2 설명"
toolTip_Alram_Type2.ToolTipIcon = ToolTipIcon.Info;
toolTip_Alram_Type2.IsBalloon = true
toolTip_Alram_Type2.ShowAlways = true
}
}
}
'C#' 카테고리의 다른 글
C# 키 입력 시각화 ( 키 다운, 키 업, 폼을 투명하게) (0) | 2019.11.04 |
---|---|
C# 키보드 입력 테스트 ( 시각화 ) (0) | 2019.11.04 |
C# 버튼을 누르면 인터넷 검색이 가능 (0) | 2018.04.13 |
C# 버튼을 누르면 사진이 보이게 하고 싶어요 (0) | 2018.04.13 |
C# 각종 프로그램 실행시키기 (0) | 2012.12.24 |