Поиск по этому блогу

четверг, 19 апреля 2012 г.

Шаблон проектирования

На одном сайте нашёл вот такой интересный проект. На примере Макдональдса показывается как нужно конструировать программу.
На таких примерах и стараюсь нацчиться программировать)))
Цитата с того сайта.
А теперь, чтобы лучше понять суть паттерна Builder, рассмотрим практический пример, в котором вы будете собирать объект HappyMeal — знаменитый детский набор, предлагаемый в сети закусочных McDonald’s. В первом случае вы соберете бюджетный вариант HappyMeal (маленькая порция пепси-колы, гамбургер, картошка и игрушка), а во втором — BigHappyMeal (гамбургер вы замените на бигмак и увеличите порцию напитка).
И сам код программы:

class HappyMeal
 
  {
 
    // содержит информацию о  составе HappyMeal
 
    ArrayList parts = new ArrayList();
 
    // Добавляете информацию  о новой составной части
 
    public void Add(string part)
 
    {
 
      parts.Add(part);
 
    }
 
    // Выводите информацию о  всем наборе
 
    public void Show()
 
    {
 
      Console.WriteLine(" Happy Meal Parts ——-");
 
      foreach (string part in parts)
 
      Console.WriteLine (part);
 
    }
 
  }


среда, 18 апреля 2012 г.

Кнопка STOP

Иногда нужно сделать кнопку, которая останавливала какой-нибудь процесс. (кнопку делал в Win Form' е и WPF) В моём случае я писал генератор случайных последовательностей с бесконечным циклом генерации, мне нужно было остановить генерацию. Самый просто способ создания кнопки Stop:
1 - нужно создать глобальную переменную (булевскую) 

private bool stop = false;

2 - прописать эту переменную перед циклом, который нужно остановить. Пример:

stop = false;
for (int i = 0; i < 10; i++)
            {

                тело цикла
            }

3 - вставить проверку на true или false данной переменной в тело цикла

stop = false;
for (int i = 0; i < 10; i++)
            {

                if (stop == true) break;
            }

4 - сделать кнопку, которая будет изменять значение нашей переменной. Пример:


        private void button2_Click(object sender, RoutedEventArgs e)
        {
            stop = true;
        }

Кнопка готова к работе)

Кнопка очистки всех TextBox' ов на форме в WPF

Задача: на форме есть n - колличество TextBox'ов, их нужно очистить все одновременно нажатием одной кнопки.
Делаем функцию:

void LoopVisualTree(DependencyObject obj)//обнуление текст боксов
        {
            for (int i = 0; i < VisualTreeHelper.GetChildrenCount(obj); i++)
            {

                if (obj is TextBox)
                {
                    ((TextBox)obj).Text = null;
                }
                // РЕКУРСИЯ
                LoopVisualTree(VisualTreeHelper.GetChild(obj, i));
            }

        }

Потом нажимаем на кнопку на форме 2 раза, чтобы перейти в её обработчик и прописываем там(пример!!!!):

private void button10_Click(object sender, RoutedEventArgs e)
        {
           
            LoopVisualTree(this);
                        
        }

Application.DoEvents в WPF

В Win Form есть матод Application.DoEvents, который обрабатывает все сообщения Windows, которые в данный момент находятся в очереди сообщений.
Но в WPF его нет. Его можно создать сделав вот такой метод:


public static void DoEvents()//Реализация DoEvents в WPF
        {
            if (Application.Current != null)
                Application.Current.Dispatcher.Invoke(DispatcherPriority.Background, new ThreadStart(delegate { }));
        }

Затем, в тело самой программы просто нужно добавить DoEvents(), и бедет работать так же, как если бы это был  Application.DoEvents в Win Forme.