2017년 6월 9일 금요일

Visual Studio for mac으로 작성된 계산기 앱 소스 입니다.

자마린 스튜디오가 비주얼 스튜디오로 흡수되었습니다.
얼마전 정식 버전이 출시되었죠...
수업용 예제로 사용할 계산기 전체 소스입니다.
C# 코드 + XAML 태그로 구성되어 있습니다.
Xamarin Forms로 만들면 원소스를 아이폰, 안드로이드폰, 윈도우폰 등에서 사용할 수 있습니다.







MainPage.xaml 의 태그들

<?xml version="1.0" encoding="UTF-8"?>
<ContentPage 
    xmlns="http://xamarin.com/schemas/2014/forms" 
    xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" 
    x:Class="Calculator.MainPage">

    <Grid Padding="5,0" RowSpacing="1"
        ColumnSpacing="1" BackgroundColor="Black">
        <Grid.RowDefinitions>
            <Grid.RowDefinition Height="2*" />
        </Grid.RowDefinitions>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="*" />
        </Grid.ColumnDefinitions>
        <Label FontAttributes="Bold" 
                FontSize="48" 
                BackgroundColor="Black" Text="0"
                TextColor="White" 
                HorizontalTextAlignment="End" 
                VerticalTextAlignment="Center"
            LineBreakMode="NoWrap" Grid.ColumnSpan="4" />
        <Button Text="7" Grid.Row="1" Grid.Column="0"
               BackgroundColor="White" TextColor="Black"
               FontSize="36" BorderRadius="0" />
        <Button Text="8" Grid.Row="1" Grid.Column="1"
               BackgroundColor="White" TextColor="Black"
               FontSize="36" BorderRadius="0" />
        <Button Text="9" Grid.Row="1" Grid.Column="2"
               BackgroundColor="White" TextColor="Black"
               FontSize="36" BorderRadius="0" />

        <Button Text="4" Grid.Row="2" Grid.Column="0"
               BackgroundColor="White" TextColor="Black"
               FontSize="36" BorderRadius="0" />
        <Button Text="5" Grid.Row="2" Grid.Column="1"
               BackgroundColor="White" TextColor="Black"
               FontSize="36" BorderRadius="0" />
        <Button Text="6" Grid.Row="2" Grid.Column="2"
               BackgroundColor="White" TextColor="Black"
               FontSize="36" BorderRadius="0" />

        <Button Text="1" Grid.Row="3" Grid.Column="0"
               BackgroundColor="White" TextColor="Black"
               FontSize="36" BorderRadius="0" />
        <Button Text="2" Grid.Row="3" Grid.Column="1"
               BackgroundColor="White" TextColor="Black"
               FontSize="36" BorderRadius="0" />
        <Button Text="3" Grid.Row="3" Grid.Column="2"
               BackgroundColor="White" TextColor="Black"
               FontSize="36" BorderRadius="0" />
        <Button Text="0" Grid.Row="4" Grid.Column="0" Grid.ColumnSpan="3"
               BackgroundColor="White" TextColor="Black"
               FontSize="36" BorderRadius="0" />

        <Button Text="/" Grid.Row="1" Grid.Column="3"
                BackgroundColor="#FFA500" TextColor="White"
                FontSize="36" BorderRadius="0" />
        <Button Text="X" Grid.Row="2" Grid.Column="3"
                BackgroundColor="#FFA500" TextColor="White"
                FontSize="36" BorderRadius="0" />
        <Button Text="-" Grid.Row="3" Grid.Column="3"
                BackgroundColor="#FFA500" TextColor="White"
                FontSize="36" BorderRadius="0" />
        <Button Text="+" Grid.Row="4" Grid.Column="3"
                BackgroundColor="#FFA500" TextColor="White"
                FontSize="36" BorderRadius="0" />

        <Button Text="C" Grid.Row="5" Grid.Column="0"
                BackgroundColor="#808080" TextColor="White"
                FontSize="36" BorderRadius="0" />

        <Button Text="=" Grid.Row="5" Grid.Column="1" Grid.ColumnSpan="3"
                BackgroundColor="#FFA500" TextColor="White"
                FontSize="36" BorderRadius="0" />
    </Grid>

</ContentPage>


(이벤트를 모두 연결한 MainPage.xaml 코드)
<?xml version="1.0" encoding="UTF-8"?>
<ContentPage 
    xmlns="http://xamarin.com/schemas/2014/forms" 
    xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" 
    x:Class="Calculator.MainPage">

    <Grid Padding="5,0" RowSpacing="1"
        ColumnSpacing="1" BackgroundColor="Black">
        <Grid.RowDefinitions>
          <RowDefinition Height="2*" />
          <RowDefinition Height="*" />
          <RowDefinition Height="*" />
          <RowDefinition Height="*" />
          <RowDefinition Height="*" />
          <RowDefinition Height="*" />
       </Grid.RowDefinitions>

       <Grid.ColumnDefinitions>
          <ColumnDefinition Width="*" />
          <ColumnDefinition Width="*" />
          <ColumnDefinition Width="*" />
          <ColumnDefinition Width="*" />
       </Grid.ColumnDefinitions>
        
        <Label x:Name="resultText" 
                FontAttributes="Bold" 
                FontSize="48" 
                BackgroundColor="Black" Text="0"
                TextColor="White" 
                HorizontalTextAlignment="End" 
                VerticalTextAlignment="Center"
            LineBreakMode="NoWrap" Grid.ColumnSpan="4" />
        <Button Text="7" Grid.Row="1" Grid.Column="0"
               BackgroundColor="White" TextColor="Black"
               FontSize="36" BorderRadius="0"
               Clicked="OnSelectNumber" />
        <Button Text="8" Grid.Row="1" Grid.Column="1"
               BackgroundColor="White" TextColor="Black"
               FontSize="36" BorderRadius="0"
               Clicked="OnSelectNumber" /> 
        <Button Text="9" Grid.Row="1" Grid.Column="2"
               BackgroundColor="White" TextColor="Black"
               FontSize="36" BorderRadius="0"
               Clicked="OnSelectNumber" />

        <Button Text="4" Grid.Row="2" Grid.Column="0"
               BackgroundColor="White" TextColor="Black"
               FontSize="36" BorderRadius="0"
                Clicked="OnSelectNumber" />
        <Button Text="5" Grid.Row="2" Grid.Column="1"
               BackgroundColor="White" TextColor="Black"
               FontSize="36" BorderRadius="0"
               Clicked="OnSelectNumber" />
        <Button Text="6" Grid.Row="2" Grid.Column="2"
               BackgroundColor="White" TextColor="Black"
               FontSize="36" BorderRadius="0"
               Clicked="OnSelectNumber" />

        <Button Text="1" Grid.Row="3" Grid.Column="0"
               BackgroundColor="White" TextColor="Black"
               FontSize="36" BorderRadius="0"
               Clicked="OnSelectNumber" /> 
        <Button Text="2" Grid.Row="3" Grid.Column="1"
               BackgroundColor="White" TextColor="Black"
               FontSize="36" BorderRadius="0" 
               Clicked="OnSelectNumber" /> 
        <Button Text="3" Grid.Row="3" Grid.Column="2"
               BackgroundColor="White" TextColor="Black"
               FontSize="36" BorderRadius="0" 
               Clicked="OnSelectNumber" /> 
        <Button Text="0" Grid.Row="4" Grid.Column="0" Grid.ColumnSpan="3"
               BackgroundColor="White" TextColor="Black"
               FontSize="36" BorderRadius="0" 
               Clicked="OnSelectNumber" /> 

        <Button Text="/" Grid.Row="1" Grid.Column="3"
                BackgroundColor="#FFA500" TextColor="White"
                FontSize="36" BorderRadius="0" 
                Clicked="OnSelectOperator" />
        <Button Text="X" Grid.Row="2" Grid.Column="3"
                BackgroundColor="#FFA500" TextColor="White"
                FontSize="36" BorderRadius="0" 
                Clicked="OnSelectOperator" />
        <Button Text="-" Grid.Row="3" Grid.Column="3"
                BackgroundColor="#FFA500" TextColor="White"
                FontSize="36" BorderRadius="0" 
                Clicked="OnSelectOperator" />
        <Button Text="+" Grid.Row="4" Grid.Column="3"
                BackgroundColor="#FFA500" TextColor="White"
                FontSize="36" BorderRadius="0" 
                Clicked="OnSelectOperator" />

        <Button Text="C" Grid.Row="5" Grid.Column="0"
                BackgroundColor="#808080" TextColor="White"
                FontSize="36" BorderRadius="0" 
                Clicked="OnClear" />

        <Button Text="=" Grid.Row="5" Grid.Column="1" Grid.ColumnSpan="3"
                BackgroundColor="#FFA500" TextColor="White"
                FontSize="36" BorderRadius="0"
                Clicked="OnCalculate" />
    </Grid>

</ContentPage>

(로직이 모두 추가된 MainPage.xaml.cs파일)
using System;
using System.Collections.Generic;

using Xamarin.Forms;

namespace Calculator
{
    public partial class MainPage : ContentPage
    {
int currentState = 1;
string mathOperator;
double firstNumber, secondNumber;

        public MainPage()
        {
            InitializeComponent();
            //reset하는 코드추가 
            OnClear(this, null); 
        }
void OnSelectNumber(object sender, EventArgs e)
{
Button button = (Button)sender;
string pressed = button.Text;

if (this.resultText.Text == "0" || currentState < 0)
{
this.resultText.Text = "";
if (currentState < 0)
currentState *= -1;
}

this.resultText.Text += pressed;

double number;
if (double.TryParse(this.resultText.Text, out number))
{
this.resultText.Text = number.ToString("N0");
if (currentState == 1)
{
firstNumber = number;
}
else
{
secondNumber = number;
}
}
}

void OnSelectOperator(object sender, EventArgs e)
{
currentState = -2;
Button button = (Button)sender;
string pressed = button.Text;
mathOperator = pressed;
}

void OnClear(object sender, EventArgs e)
{
firstNumber = 0;
secondNumber = 0;
currentState = 1;
this.resultText.Text = "0";
}

void OnCalculate(object sender, EventArgs e)
{
if (currentState == 2)
{
var result = SimpleCalculator.Calculate(firstNumber, secondNumber, mathOperator);

this.resultText.Text = result.ToString("N0");
firstNumber = result;
currentState = -1;
}
}

    }
}

(SharedResources.cs파일)
using System;
using Xamarin.Forms; 

namespace Calculator
{
    public static class SharedResources
    {
        public static Color OpButtonBkColor
        {
            get { return Color.FromRgb(0xff, 0xa5, 0);  }
        }
    }
}



댓글 없음:

댓글 쓰기

참고: 블로그의 회원만 댓글을 작성할 수 있습니다.

'일론 머스크' '젠슨 황' AI 리더들, 그들의 성공 비결은 바로 이것 - 누가 부자가 되는가 영상입니다. ㅎㅎ

  책을 통해서만 접했던 내용들을 영상으로 보니 더 실감이 납니다. KBS에서 방송된 내용인데 주말에 보시면 좋은 영상입니다. 엔비디아의 주가가 이해가 됩니다. ㅋㅋ 생각보다 미국시장이 강한 것이 AI는 거의 미국과 중국이 주도하는 시장이 되고 있습...