WPF 팁

계산기 sa2랑 평점: 없음 조회: 5154

.xaml

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
<Window x:Class="Calculator.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Loaded="MainWindow_Loaded"
        Title="Calculator" Height="356" Width="274" ResizeMode="NoResize">
    <Grid>
        <UniformGrid HorizontalAlignment="Center" VerticalAlignment="Bottom" Width="250" Height="250">
            <Button x:Name="SevenButton" Content="7" Width="50" Height="50" Click="DisplayNum"/>
            <Button x:Name="EightButton" Content="8" Width="50" Height="50" Click="DisplayNum"/>
            <Button x:Name="NineButton" Content="9" Width="50" Height="50" Click="DisplayNum"/>
            <Button x:Name="DivisionButton" Content="/" Width="50" Height="50" Click="DivisionButton_Click"/>
            <Button x:Name="FourButton" Content="4" Width="50" Height="50" Click="DisplayNum"/>
            <Button x:Name="FiveButton" Content="5" Width="50" Height="50" Click="DisplayNum"/>
            <Button x:Name="SixButton" Content="6" Width="50" Height="50" Click="DisplayNum"/>
            <Button x:Name="MultiplyButton" Content="*" Width="50" Height="50" Click="MultiplyButton_Click"/>
            <Button x:Name="OneButton" Content="1" Width="50" Height="50" Click="DisplayNum"/>
            <Button x:Name="TwoButton" Content="2" Width="50" Height="50" Click="DisplayNum"/>
            <Button x:Name="ThreeButton" Content="3" Width="50" Height="50" Click="DisplayNum"/>
            <Button x:Name="MinusButton" Content="-" Width="50" Height="50" Click="MinusButton_Click"/>
            <Button x:Name="ZeroButton" Content="0" Width="50" Height="50" Click="DisplayNum"/>
            <Button x:Name="EqualButton" Content="=" Width="50" Height="50" Click="EqualButton_Click"/>
            <Button x:Name="ClearButton" Content="C" Width="50" Height="50" Click="ClearButton_Click"/>
            <Button x:Name="PlusButton" Content="+" Width="50" Height="50" Click="PlusButton_Click"/>
        </UniformGrid>
        <TextBox x:Name="ResultTextBox" VerticalAlignment="Top" Background="#FFEDEDED" Margin="10,10,10,0"
                 Height="50" HorizontalContentAlignment="Right" VerticalContentAlignment="Center"
                 FontSize="18" IsReadOnly="True" Text="0"/>
        <TextBlock x:Name="CalculationTextBlock" VerticalAlignment="Top" Margin="12,10,12,0"
                   HorizontalAlignment="Right" Text="123"/>
    </Grid>
</Window>




.cs

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
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
using System;
using System.Windows;
using System.Windows.Controls;
 
namespace Calculator
{
    public partial class MainWindow : Window
    {
        bool eraseResult;
        decimal firstNumber, lastNumber;
        Action calOperator;
 
        string TxtCalculation
        {
            get
            {
                return CalculationTextBlock.Text;
            }
            set
            {
                eraseResult = true;
                CalculationTextBlock.Text = value;
            }
        }
 
        string TxtResult
        {
            get
            {
                return ResultTextBox.Text;
            }
            set
            {
                ResultTextBox.Text = value;
            }
        }
 
        decimal Result
        {
            get
            {
                decimal rtn;
                bool isDecimal = decimal.TryParse(TxtResult, out rtn);
 
                if (isDecimal)
                {
                    return rtn;
                }
                else
                {
                    return 0;
                }
            }
            set
            {
                TxtResult = String.Format("{0}"value);
            }
        }
 
        public MainWindow()
        {
            InitializeComponent();
        }
 
        void MainWindow_Loaded(object sender, RoutedEventArgs e)
        {
            ClearButton_Click(nullnull);
        }
 
        void DisplayNum(object sender, RoutedEventArgs e)
        {
            TxtResult = TxtResult.TrimStart('0');
 
            if (eraseResult)
            {
                eraseResult = false;
                TxtResult = String.Empty;
            }
 
            TxtResult += (sender as Button).Content.ToString();
            lastNumber = Result;
        }
 
        void ClearButton_Click(object sender, RoutedEventArgs e)
        {
            Result = 0;
            calOperator = Init;
            TxtCalculation = String.Empty;
        }
 
        void PlusButton_Click(object sender, RoutedEventArgs e)
        {
            if (eraseResult)
            {
                return;
            }
 
            calOperator();
            calOperator = Plus;
            TxtCalculation += String.Format("{0} {1} ", lastNumber, (sender as Button).Content);
        }
 
        void MinusButton_Click(object sender, RoutedEventArgs e)
        {
            if (eraseResult)
            {
                return;
            }
 
            calOperator();
            calOperator = Minus;
            TxtCalculation += String.Format("{0} {1} ", lastNumber, (sender as Button).Content);
        }
 
        void MultiplyButton_Click(object sender, RoutedEventArgs e)
        {
            if (eraseResult)
            {
                return;
            }
 
            calOperator();
            calOperator = Multiply;
            TxtCalculation += String.Format("{0} {1} ", lastNumber, (sender as Button).Content);
        }
 
        void DivisionButton_Click(object sender, RoutedEventArgs e)
        {
            if (eraseResult)
            {
                return;
            }
 
            calOperator();
            calOperator = Division;
            TxtCalculation += String.Format("{0} {1} ", lastNumber, (sender as Button).Content);
        }
 
        void EqualButton_Click(object sender, RoutedEventArgs e)
        {
            calOperator();
            TxtCalculation = String.Empty;
        }
 
        void Init()
        {
            firstNumber = Result;
        }
 
        void Plus()
        {
            firstNumber += lastNumber;
            Result = firstNumber;
        }
 
        void Minus()
        {
            firstNumber -= lastNumber;
            Result = firstNumber;
        }
 
        void Multiply()
        {
            firstNumber *= lastNumber;
            Result = firstNumber;
        }
 
        void Division()
        {
            if (lastNumber == 0)
            {
                TxtResult = "0으로 나눌 수 없습니다.";
                return;
            }
 
            firstNumber /= lastNumber;
            Result = firstNumber;
        }
    }
}




델리게이트 공부하는데 참고하시라고 만들어 봤어요.
윈도우 계산기랑 비슷하게 만들어보려고 하긴 했는데.. 뭐 그러하네요.





태그 : 계산기 대리자 델리게이트 Action delegate
작성자 정보
sa2랑
Level 58
 [EXP.13/250]

메일:  비공개
글등록 +12 660 덧글등록 +3 1420
자기소개
- 무적의 솔로부대



- 관심분야1 : visual C#, aspx, xaml, jQuery, wcf, visualstudio IDE
- 관심분야2 : OOP, GoF's Patterns, POSA1, UML, TDD
- 관심분야3 : ANSI SQL, SSAS, 오픈소스, 협업도구, feed
- 관심분야4 : UX, 모션그래픽
- 관심분야5 : openid(SSO), NFC
글 공유하기 |
  tweet facebook
2012-10-22 오후 7:38:59
나도한마디
사용자
지송닷넷            [2012-10-22]
Level 99
 [EXP.만랩]
잘보았습니다 ^^;;;

사용자
어린연어            [2012-10-25]
Level 2
 [EXP.7/16]
잘보고 갑니다 ~
사용자
아오쿠르            [2015-04-22]
Level 18
 [EXP.58/70]
잘보고 갑니다!
태그로 엮인글
[C#.NET Q&A] backgroundWorker 에 대해 궁굼합니다..[1]+2  김군
[C#.NET Q&A] 델리게이트 질문[3]  멘탈붕괴
[C#.NET Q&A] HOONS 팁에 있는 글인데 이해가 잘 안되서 질문합니다.[1]+2  필승불패
[C#.NET Q&A] 델리게이트 배열 문제[1]+3  mmemmemme
[C#.NET Q&A] 델리게이트와 이벤트에 관해서 질문이요[1]  DevHong
[C#.NET Q&A] 동일한 구조의 함수를 계속 호출할때 가장 좋은 방법이 어떤게 있을까요?  모글리
[C#.NET Q&A] delegate... 제네릭메서드 도와주세요.  vector_xy
[C#.NET Q&A] Delegate가 뭔지 감이 안잡히네요...;;[1]+1  찾아라야근의열쇠
[C#.NET Q&A] 쓰레드 delegate 문제[1]+1 파일첨부 준러브
[C#.NET Q&A] winform 계산기에서 괄호 안의 하위문자열 추출 관련[1]  미스트랄
글리스트
Horizontal ListBox 샘플 파일첨부 이재웅
Vertical ListBox 샘플[2] 파일첨부 이재웅
Form Designer 프로젝트 #7 - Tool Window (콘트롤 속성 지정/변경) - 완료![1]+1  안떠니
Form Designer 프로젝트 #6 - Tool Window (콘트롤 추가/삭제) - 완료![3]+1  안떠니
Form Designer 프로젝트 #5 - TreeView Manager  안떠니
Form Designer 프로젝트 #4 - TreeView + XML [1]  안떠니
Form Designer 프로젝트 #3 - TreeView 삭제 / 이름변경[2]+2  안떠니
Form Designer 프로젝트 #2 - TreeView 노드 추가[1]  안떠니
Form Designer 프로젝트 #1 - 프로젝트 관리 화면[4]+1  안떠니
실행파일에서 config 파일 변경하기[1]+3  킴언어
 ★현재글->   계산기[3]  sa2랑
WPF 성능관리  sa2랑
[RE] WPF Performance Suite  sa2랑
WPF에서 내부에서 작업한 내용을 UI에 올릴때 Dispatcher 클래스 사용[1]  지유니
VS와 Blend에서 화면구조 보기 파일첨부 깜디
Canvas 의 Preview 기능 구현하기[1] 파일첨부 깊은물
[Command] 하나의 컨트롤에 여러 커맨드를 등록하는 법[1]  깜디
[UX 스터디 자료] WPF 자료[5] 파일첨부 sky
DataView를 이용해서 소팅하는 방법  지유니
ListView를 이용해서 그룹핑, 소팅하는 법  지유니
WPF에서 Ellipse 그리기[3]+2  재선