Fly to the sky & Return

다중 모니터를 이용한 번호 전광판 시스템 만들어보기 본문

프로그래밍/c# & VB 등

다중 모니터를 이용한 번호 전광판 시스템 만들어보기

낼은어떻게 2016. 9. 8. 19:39
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

이번 시간에 소개할 소스는 식당등에서 사용할 수 있는  번호 전광판입니다.  필요해서 만들어봤는데 이런저런 소소한 재미가 있는 작업이였습니다.


프로그램이 동작되면 다음과 같이 작동합니다.





적용된 것들은


1 . 번호를 입력하면  다른 모니터에 번호 전송..

2. 해당 번호를 클릭하면  번호 삭제

3. 번호 전송시  몇초간 크게 화면에 나타내기


요정도입니다.  



<Form 1  소스입니다.>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
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 WindowsFormsApplication2
{
    
    public partial class Form1 : Form
    {
        Form2 frm;
        Form3 frm2;
 
        public int tabIndex;
        public string text_button;
        public Form1()
        {
            InitializeComponent();
        }
       
  //패널 안에있는 버튼 클릭했을 때....
        void btn_Click(object sender, EventArgs e)
        {
            Button btn = sender as Button;
 
            tabIndex = btn.TabIndex;
 
            flp.Controls.Remove(btn);
            frm.Refresh();
 
            for (int i = 0; i < flp.Controls.Count; i++)
            {
                flp.Controls[i].TabIndex = i;
            }
 
            frm.btn_remove(tabIndex);
            frm.Refresh();
            listView1.Items[tabIndex].Remove();
            flp.Refresh();
        }
 
       // 텍스트 박스에 번호를 입력하고 전송할때.....
        private void textBox1_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter) {
                frm2 = new Form3();
 
//다중 모니터를 인식하는 소스..

                Screen[] screens = Screen.AllScreens;
                if (screens.Length > 1)   
                {
                    Screen scrn = (screens[0].WorkingArea.Contains(this.Location))
                                             ? screens[1] : screens[0];
                    
//새로운 번호 전송시 크게 보여지게하는 소스
frm2.label1.Text = textBox1.Text;
                  
                    frm2.Size = new Size(scrn.Bounds.Width / 2, scrn.Bounds.Height / 2);
                    frm2.label1.Size = new Size(scrn.Bounds.Width * 1 / 2, scrn.Bounds.Height / 2);
                    frm2.Show();
 
                   
                    //대충 다중모니터 중앙에 나타나게 하는 소스
                    frm2.Location = new System.Drawing.Point(scrn.Bounds.Left + scrn.Bounds.Width/2 - 400, scrn.Bounds.Height/2 -100);
                    
                }
                else
                {
                    frm2.label1.Text = textBox1.Text;
                  
                    frm2.Show();
                }
 
              
                flp.Controls.Clear();
 
                frm.flp2.Controls.Clear();
               
 //번호별 sort를 구현하기위한 listview ..... 실제 프로그래에서는 visible = false
                listView1.Items.Add(textBox1.Text);
                
 
                for (int i = 0; i < listView1.Items.Count; i++)
                {
 
                    text_button = listView1.Items[i].Text;
                    Button btn = new Button();
                    btn.Text = text_button;
                  
                    textBox1.Text = "";
                    btn.Click += new EventHandler(btn_Click);
                    flp.Controls.Add(btn);
                    
                    frm.btn_make(text_button);
                    frm.Refresh();
                }
 
 
       
            }
        }
 
 
 
        private void Form1_Load(object sender, EventArgs e)
        {
  //번호가 나타날 화면을 다중 모니터에 나타가게 하기
            frm = new Form2(this as IMyInterface);
 
            Screen[] screens = Screen.AllScreens;
            if (screens.Length > 1)     // Has more screen
            {
                Screen scrn = (screens[0].WorkingArea.Contains(this.Location))
                                         ? screens[1] : screens[0];
                frm.Show();
                frm.Location = new System.Drawing.Point(scrn.Bounds.Left, 0);
                frm.WindowState = FormWindowState.Maximized;
            }
            else
            {
              
                frm.Show();
            }
        }
       
 
    }
}

cs



< form 2 소스입니다.>


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
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 WindowsFormsApplication2
{
    public partial class Form2 : Form
    {
        
        public string text1;
        public int i;
       
        double oriWidth;
        double oriHeight;
        public Form2()
        {
 
            InitializeComponent();
 
            this.frm = frm;
        }
 
       
 
       
 
        //패널위에 버튼을 생성하는 메소드.
 
        public void btn_make(string btn_name)
        {
            Button btn = new Button();
           
            btn.Text = btn_name;
            
            btn.Size = new Size(flp2.Width*2/11, flp2.Height / 7);
            btn.Font = new Font("Gulim", flp2.Height / 10);
            btn.Margin = new Padding(flp2.Width*1/110);
                
            flp2.Controls.Add(btn);
 
           
        }
 
 
       // 패널위의 버튼을 삭제하는 메서드
        public void btn_remove(int tabIndex)
        {
            
            flp2.Controls.RemoveAt(tabIndex);
            flp2.Refresh();
        }
 
        
 
        private void Form2_SizeChanged(object sender, EventArgs e)
        {
            oriWidth = this.Width;
            oriHeight = this.Height;
 
            flp2.Size = new Size(Convert.ToInt32( oriWidth - 60), Convert.ToInt32(oriHeight * 6/10));
            flp2.Location = new System.Drawing.Point(20, Convert.ToInt32(oriHeight * 1 / 4));
        }
    }
}
 
cs


<form 3> 소스입니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
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 WindowsFormsApplication2
{
    public partial class Form3 : Form
    {
        public Form3()
        {
            InitializeComponent();
        }
 
        private void Form3_Shown(object sender, EventArgs e)
        {
 
            this.Show();
 
            Delay(3000);
 
            this.Close();
        }
 
        //특정시간 동안 딜레이 시키는 소스
 
        private static DateTime Delay(int MS)
        {
            DateTime ThisMoment = DateTime.Now;
            TimeSpan duration = new TimeSpan(0000, MS);
            DateTime AfterWards = ThisMoment.Add(duration);
 
            while (AfterWards >= ThisMoment)
            {
                System.Windows.Forms.Application.DoEvents();
                ThisMoment = DateTime.Now;
            }
 
            return DateTime.Now;
        }
    }
}
 
cs