private void InitializeButtons() //создание кнопок в контейнере компоновки. { var gColCount = gridbuttons.ColumnDefinitions.Count; var gRowCount = gridbuttons.RowDefinitions.Count; var btCount = 0; for (int i = 0; i < gColCount; i++) { if (i == 3)// пропускаем пустой четвертый столбец грида { continue; } else { for (int j = 0; j < gRowCount; j++) { if (i == 1 && j == 3 || i == 4 && j == 3 || i == 5 && j == 3) // пропускаем четвертую кнопку второго, пятого и шестого столбцов грида. { continue; } bt = new Button(); bt.VerticalAlignment = VerticalAlignment.Stretch; bt.HorizontalAlignment = HorizontalAlignment.Stretch; bt.Margin = new Thickness(5, 5, 5, 5); bt.Padding = new Thickness(10); bt.MinWidth = 48; bt.MinHeight = 48; bt.Content = btnContent[btCount]; bt.FontSize = 15; bt.Click += Button_Click; bt.Tag = btnTag[btCount]; if (i != 3) { Grid.SetColumn(bt, i); Grid.SetRow(bt, j); if (btCount < btnTag.Length) { btCount++; } } else { Grid.SetColumn(bt, j); Grid.SetRow(bt, i + 1); } if (i == 0 && j == 3) { Grid.SetColumnSpan(bt, 2); } gridbuttons.Children.Add(bt); } } } var textRange = new TextRange(Rbox1.Document.ContentStart, Rbox1.Document.ContentEnd); IEnumerable <Button> collection = gridbuttons.Children.OfType <Button>(); if (!(string.IsNullOrEmpty(textRange.Text))) { Rbox1.Document.Blocks.Clear(); foreach (var item in collection) { Rbox1.AppendText(item.Content.ToString()); } } }
private void Button_Click(object sender, RoutedEventArgs e) { var butn = (sender as Button); // ноль if (Convert.ToInt32(butn.Tag) == 0) { if (iSfirstDigit) { Lbl1.Content = butn.Content; iSfirstDigit = false; } if (Convert.ToString(Lbl1.Content) != "0") { Lbl1.Content = butn.Content; } return; } // С if (Convert.ToInt32(butn.Tag) == -1) { accumulator = 0; operationNumber = 0; Lbl1.Content = 0; //дефолтные значения и флаг первой цифры, для замены нуля. iSfirstDigit = true; return; } //1..9 if (Convert.ToInt32(butn.Tag) > 0) { if (iSfirstDigit) { Lbl1.Content = butn.Content; iSfirstDigit = false; //больше не первое число в ряду. его так же можно считать уже вторым(следующим) } else { Lbl1.Content += (string)butn.Content; } return; } //BckSpc if (Convert.ToInt32(butn.Tag) == -7) { string tmpStr = null; string t1 = null; if (Convert.ToString(Lbl1.Content) != "0" && !string.IsNullOrEmpty(Convert.ToString(Lbl1.Content))) { if (Lbl1.Content is string) { tmpStr = (string)Lbl1.Content; } for (int i = 0; i < tmpStr.Length - 1; i++) { t1 += tmpStr[i]; if (string.IsNullOrEmpty(t1)) { } } if (!string.IsNullOrEmpty(tmpStr)) { Lbl1.Content = Convert.ToString(t1); Rbox1.AppendText("\n" + Lbl1.Content); } } } // + - * / = if (Convert.ToInt32(butn.Tag) < -1) { double currentContentFromLabel = Convert.ToDouble(Lbl1.Content); if (iSfirstDigit == false) //проверка следующего ввода на число { iSnextOperation = false; iSfirstDigit = true; } else { iSnextOperation = true; } if (accumulator != 0 && iSnextOperation == false) { switch (operationNumber) { case -2: { accumulator = currentContentFromLabel; break; } case -3: { accumulator -= currentContentFromLabel; break; } case -4: { accumulator *= currentContentFromLabel; break; } case -5: { accumulator /= currentContentFromLabel; break; } case -6: { accumulator += currentContentFromLabel; break; } } Lbl1.Content = accumulator; //выводим результат в лейбл } else { accumulator = currentContentFromLabel; //запоминаем первое число из поля } operationNumber = Convert.ToInt32(butn.Tag); //запоминаем знак операции, ждём второе число/новый ввод клавиши iSfirstDigit = true; //флаг на новое число } }