본문 바로가기
C#

C#으로 간단한 알람 프로그램 만들기 ( 몇 가지만 상세하게 )

by 아스키의 공부방 2019. 11. 3.
728x90
반응형

 

제 티스토리를 가만히 보면 아래 글이 조회며 유입이 제일 많습니다.

https://gameprograming.tistory.com/3?category=493568

 

C#으로 간단한 알람 프로그램 만들기 (윈도우즈 폼) Windows Forms 응용 프로그램

표는 밑에 엑셀 파일로 첨부 했습니다. 주요 기능 : 트레이아이콘, 풍선 도움말, 알람 음악 선택, 음악 미리듣기, 음악 중지 속성 값 사용 된 툴 Name Text TextAlign Font Visible Value AutoSize Checked Interv..

gameprograming.tistory.com

저게 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();
        }

이렇게만 해도 되네요.

Test_Alram 파일 실행시

소스 전문

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;
            }
        }
    }
}

 

시간 설정에 대한 로직이나 그 외에 메시지박스나 툴팁, 트레이아이콘 전환등등..

모든것들을 예전에 작성했던 글에 있는 소스들을 그대로 가지고 왔습니다.

 

아래에서 필요한 부분만 파악하시면 될겁니다.

 

 

 

Test_Alram.exe
0.01MB

아래 소스 원본 파일이 없어서 보여드리지 못해 아쉽네요..

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
		}
	}
}
728x90
반응형