Как сделать убегающую кнопку в visual studio
После того, как мы разобрались со свойствами и событиями элементов управления , предлагаю провести с ними интересный эксперимент. Для этого мы напишем простую, но довольно забавную программу.
4.21.1. Задание
- Создать в Microsoft Excel форму шириной 350 пикселей и высотой 200 пикселей.
- Разместить на форме кнопки "Да", "Нет" и надпись: "Хотите ли вы получить прибавку к зарплате?".
- Настроить свойства кнопки с надписью "Да" таким образом, чтобы на нее нельзя было перевести фокус ввода.
- Написать программу, которая при наведении указателя мыши на кнопку с надписью "Да" перемещала бы эту кнопку в пределах формы.
4.21.2. Решение
Создадим новую форму, установим следующим образом ее свойства:
Name (Имя) — frm_MovingButton
Width (Ширина) — 350
Height (Высота) — 200
Caption (Заголовок формы) — Тест
Добавим на форму следующие элементы управления (табл. 4.4.)
На рис. 4.20. вы можете видеть форму frm_MovingButton .
Дважды щелкнем по cmd_Yes . В редакторе кода выберем в поле событий MouseMove .
В тело обработчика события MouseMove для кнопки cmd_Yes введите такой текст (листинг 4.16).
В листинге 4.16. мы обращаемся к следующим свойствам кнопки cmd_Yes :
- Left — расстояние между кнопкой и левым краем формы.
- Top — расстояние между кнопкой и верхним краем формы.
Функция Rnd возвращает случайное число от 0 до 1. Для вычисления нового расстояния от кнопки до левого края формы умножаем случайное число на 250, до верхнего края формы – на 150. Эти значения взяты не случайно. Ниже приведен их расчет.
Каждый раз, когда пользователь наводит указатель мыши на кнопку cmd_Yes , кнопка случайным образом меняет положение на форме. Значит, с помощью мыши он не сможет нажать на кнопку.
Кнопки на формах можно нажимать не только с помощью мыши. Если на кнопке установлен фокус ввода (как вы знаете, он перемещается по элементам управления по нажатию клавиши Tab на клавиатуре), "нажать" на кнопку можно, нажав клавишу Пробел или Enter . Свойство Tabstop кнопки cmd_Yes мы установили равным False — то есть кнопка не сможет получить фокус ввода и ее нельзя будет нажать даже с использованием клавиатуры.
Для того чтобы программа приобрела законченный вид, добавим обработчики события Click для кнопок cmd_No и cmd_Yes . Нажатие на кнопку cmd_No должно вывести надпись: "Спасибо за участие в опросе" и завершить программу. А если пользователю все же удастся нажать на неуловимую cmd_Yes (это возможно, если кнопка "прыгнет" так, что окажется под указателем мыши), должна вывестись какая-нибудь подходящая надпись.
Для удобства работы с программой добавьте на лист MS Excel кнопку cmd_Show_Form , которая вызывала бы форму программы. Используйте метод Show формы frm_MovingButton , чтобы отобразить ее по нажатию на кнопку (листинг 4.17).
На рис. 4.21. вы можете видеть запущенную форму программы в процессе работы с ней на фоне листа Microsoft Excel с кнопкой для вызова этой формы.
4.22. Выводы
В этой лекции мы познакомились с особенностями конструирования пользовательских интерфейсов при помощи элементов управления. Однако создать интерфейс – это лишь часть работы программиста. Другая часть заключается в написании кода. Основами кодирования на VBA мы займемся в следующей лекции.
Это пошаговое руководство предназначено для изучения того, как с помощью XAML можно создать анимированную кнопку для использования в приложении Windows Presentation Foundation. В этом пошаговом руководстве для создания ресурса настраиваемой кнопки используются стили и шаблон, что обеспечивает повторное использование кода и разделение логики кнопки от объявления кнопки. Код в этом пошаговом руководстве полностью написан на языке XAML.
В этом пошаговом руководстве показано, как можно создать приложение путем ввода или копирования и вставки кода на языке XAML в Visual Studio. Если вы хотите узнать, как для создания того же приложения использовать конструктор, см. статью Создание кнопки с помощью Microsoft Expression Blend.
На следующем рисунке показаны готовые кнопки.
Создание основных кнопок
Начнем с создания проекта и добавления нескольких кнопок в окно.
Создание проекта WPF и добавление кнопок в окно
Запустите Visual Studio.
Создайте новый проект WPF: в меню Файл нажмите сначала пункт Создать, а затем Проект. Найдите шаблон Приложение Windows (WPF) и назначьте проекту имя «AnimatedButton». В результате будет создана основная структура для приложения.
Добавьте основные кнопки по умолчанию: Все файлы, необходимые для этого пошагового руководства, предоставляются шаблоном. Откройте файл Window1.xaml, дважды щелкнув его в Обозревателе решений. По умолчанию в файле Window1.xaml есть элемент Grid. Удалите элемент Grid и добавьте несколько кнопок на страницу XAML, введя или вставив следующий фрагмент кода в файл Window1.xaml:
Нажмите клавишу F5, чтобы запустить приложение; вы увидите набор кнопок, как это представлено на следующем рисунке.
Теперь, после создания основных кнопок, можно завершить работу с файлом Window1.xaml. Дальше в этом пошаговом руководстве основное внимание уделяется файлу app.xaml, в котором определяются стили и шаблон кнопок.
Задание основных свойств
Давайте настроим некоторые свойств этих кнопок, чтобы осуществить управление их внешним видом и макетом. Вместо того, чтобы настраивать свойства кнопок по отдельности, нужно использовать ресурсы для определения свойств кнопок во всем приложении. Ресурсы приложений концептуально похожи на внешние каскадные таблицы стилей (CSS) для веб-страниц; однако ресурсы намного эффективней каскадных таблицы стилей (CSS), в чем можно будет убедиться в конце этого пошагового руководства. Дополнительные сведения о ресурсах см. в разделе Ресурсы XAML.
Использование стилей для задания основных свойств кнопок
Определите блок Application.Resources: откройте файл app.xaml и добавьте следующий выделенный фрагмент разметки, если он еще отсутствует в этом файле:
Область ресурса определяется тем, где определяется ресурс. Определение ресурсов в Application.Resources в файле app.xaml позволяет использовать ресурсы в любом месте приложения. Дополнительные сведения об определении области ресурсов см. в статье Ресурсы XAML.
Создайте стиль и определите с его помощью базовые значения свойств: добавьте следующую разметку в блок Application.Resources . Эта разметка создает объект Style, который применяется ко всем кнопкам в приложении и задает для свойства кнопок Width значение 90 и для свойства Margin значение 10:
Свойство TargetType определяет то, что стиль применяется ко всем объектам типа Button. Каждый объект Setter задает разные значения свойств для объекта Style. Таким образом, на этом этапе каждая кнопка в приложении имеет ширину величиной 90 и отступ величиной 10. Если нажать клавишу F5 для запуска приложения, отобразится следующее окно.
Существует намного больше возможностей по работе со стилями, включая различные способы точной настройки целевых объектов, указание сложных значений свойств и даже использование стилей в качестве входных данных для других стилей. Более подробную информацию см. в разделе Стилизация и использование шаблонов.
Задайте для ресурса значение свойства стиля: ресурсы позволяют простым образом использовать часто определяемые объекты и значения. Особенно эффективным является определение с помощью ресурсов сложных значений для того, чтобы сделать код более модульным. Добавьте следующий выделенный фрагмент с разметкой в файл app.xaml.
Непосредственно под блоком Application.Resources вы создали ресурс с именем GrayBlueGradientBrush. Этот ресурс определяет горизонтальный градиент. Этот ресурс можно использовать в качестве значения свойства из любого места в приложении, включая метод задания стиля кнопки для свойства Background. Теперь у всех кнопок имеется значение свойства Background как у этого градиента.
Нажмите клавишу F5 для запуска приложения. Это должно выглядеть примерно так.
Создание шаблона, определяющего внешний вид кнопки
В этом разделе создается шаблон, который настраивает внешний вид (представление) кнопки. Внешний вид кнопки состоит из нескольких объектов, включая прямоугольники и другие компоненты, позволяющие придать кнопке уникальный вид.
До сих пор управление тем, как кнопки выглядят в приложении, ограничивалось изменением свойств кнопки. А что если нужно внести более радикальные изменения во внешний вид кнопки? Шаблоны предоставляют более широкие возможности по управлению внешним видом объекта. Так как шаблоны можно использовать в стилях, шаблоны применимы ко всем объектам, к которым применяется стиль (в этом пошаговом руководстве это кнопка).
Использование шаблона для определения внешнего вида кнопки
Настройте шаблон: вследствие того, что у таких элементов управления, как Button имеется свойство Template, можно определить значение свойства шаблона также, как другие значения свойств, которые задавались ранее в объекте Style с помощью объекта Setter. Добавьте следующий выделенный фрагмент с разметкой в стиль кнопки.
Измените внешний вид кнопки: на этом этапе нужно определить шаблон. Добавьте следующий выделенный фрагмент с разметкой. В этой разметке задаются два элемента Rectangle с округленными краями, после которых задается объект DockPanel. Объект DockPanel используется для размещения объекта ContentPresenter кнопки. Объект ContentPresenter выполняет отображение содержимого кнопки. В этом пошаговом руководстве содержимое — это текст («Кнопка 1», «Кнопка 2», «Кнопка 3»). Все компоненты шаблона (прямоугольники и объект DockPanel) размещаются внутри объекта Grid.
Нажмите клавишу F5 для запуска приложения. Это должно выглядеть примерно так.
Добавьте в шаблон эффект стекла: далее нужно добавить эффект стекла. Сначала нужно создать некоторые ресурсы, которые воспроизводят эффект градиента как у стекла. Добавьте эти ресурсы градиента в любое место в блоке Application.Resources :
Эти ресурсы используются как свойство Fill для прямоугольника, который вставляется в объект Grid из шаблона кнопки. Добавьте в шаблон следующий выделенный фрагмент с разметкой.
Обратите внимание, что свойство Opacity прямоугольника (у которого помимо этого есть свойство x:Name равное «glassCube») имеет значение 0, поэтому при запуске этого примера не отображается «стеклянный» прямоугольник, наложенный сверху. Это сделано для того, чтобы позже добавить в шаблон триггеры для реализации взаимодействия пользователя с кнопкой. Однако можно посмотреть, как выглядит кнопка сейчас, изменив значение Opacity на 1 и запустив приложение. См. следующий рисунок. Прежде чем переходить к следующему шагу, измените значение Opacity обратно на 0.
Создание интерактивности для кнопки
В этом разделе создаются триггеры свойств и триггеры событий, выполняющие изменение значений свойств и запуск анимации в ответ на действия пользователя, такие как перемещение указателя мыши на кнопку и нажатие кнопки.
Простым способом для добавления интерактивности (при наведении указателя мыши, выходе указателя мыши, нажатии кнопки мыши и т. д.) является определение триггеров в шаблоне или стиле. Чтобы создать Trigger, нужно определить условие для свойства, например: значение свойства IsMouseOver у кнопки равняется true . Затем нужно определить методы задания (действия), которые выполняются, когда условие триггера имеет значение «true».
Создание интерактивности для кнопки
Добавьте в шаблон триггеры: добавьте выделенный фрагмент с разметкой в свой шаблон.
Добавьте триггеры свойств: добавьте выделенный фрагмент с разметкой в блок ControlTemplate.Triggers :
Нажмите клавишу F5, чтобы запустить приложение и посмотреть проявление эффекта при наведении указателя мыши на кнопку.
Добавьте триггер фокуса: далее можно добавить аналогичные методы задания для обработки ситуации, когда кнопка получает фокус (например, после ее нажатия пользователем).
Нажмите клавишу F5, чтобы запустить приложение, а затем нажмите одну из кнопок. Обратите внимание, что кнопка остается выделенной после нажатия кнопки, так как на ней по-прежнему сохраняется фокус. Если нажать другую кнопку, то фокус получит эта новая кнопка, а прежняя кнопка его потеряет.
Добавление анимаций дляMouseEnterиMouseLeave: далее добавим некоторые варианты анимации для триггеров. Добавьте следующую разметку в любое место блока ControlTemplate.Triggers .
«Стеклянный» прямоугольник сокращается в размере, когда указатель мыши перемещается над кнопкой и возвращается к нормальному размеру при выходе указателя мыши из области кнопки.
Здесь есть две анимации, которые активируются, когда указатель мыши находится над кнопкой (вызывается событие MouseEnter). В этих анимациях «стеклянный» прямоугольник уменьшается в размерах по осям X и Y. Обратите внимание на свойства у элементов DoubleAnimation — Duration и By. Свойство Duration указывает, что анимация выполняется в течение половины секунды, а свойство By указывает, что «стеклянный» слой сжимается на 10 %.
Второй триггер события (MouseLeave) просто останавливает первый. При остановке объекта Storyboard все анимированные свойства возвращаются к значениям по умолчанию. Таким образом, когда пользователь убирает указатель с кнопки, кнопка возвращается к тому виду, который у нее был до перемещения указателя мыши на кнопку. Дополнительные сведения об анимации см. в разделе Общие сведения об эффектах анимации.
Добавьте анимацию при нажатии кнопки: в качестве последнего шага добавим триггер для случая, когда пользователь нажимает кнопку. Добавьте следующую разметку в любое место блока ControlTemplate.Triggers :
Нажмите клавишу F5, чтобы запустить приложение, а затем нажмите одну из кнопок. При нажатии кнопки «стеклянный» прямоугольник вращается.
Сводка
В этом пошаговом руководстве были выполнены следующие практические задания:
Создание объекта Style в соответствии с целевым типом объекта (Button).
Управление основными свойствами кнопок во всем приложении с помощью объекта Style.
Создание таких ресурсов, как градиенты, используемые в соответствии со значениями свойств из методов задания Style.
Настройка внешнего вида кнопок во всем приложении путем применения к кнопкам шаблона.
Настройка поведения кнопок в ответ на действия пользователя (такие как MouseEnter, MouseLeave и Click) с эффектами анимации.
Курю учебник для новичков, все задания на раз сделал, а вот 5 задание не как не в курю как сделать.
Задание такое:
Пусть при нажатии на клавишу вычитания эта клавиша прыгает куда-нибудь
совсем в другое место калькулятора и на ней вместо минуса появляется текст типа
"Я устала
вычитать" или "Не трогай
меня - я нервная! ". Когда это у вас получится, сделайте так, чтобы при нажатии на
клавишу СБРОС клавиша вычитания скромно возвращалась на место и принимала свой
прежний вид.
Private Sub Form_Load()
Плеер. DeviceType = "WaveAudio"
Плеер. DeviceType = "Sequencer"
Плеер. FileName = "c:\California_Love_2Pac.mid"
Плеер. Command = "Open"
Плеер. Command = "Play"
End Sub
Private Sub Form_Terminate()
Плеер. Command = "Close"
End Sub
Private Sub MMControl1_Done(NotifyCode As Integer)
Private Sub В_Квадрат_Click()
Звук. FileName = "c:\Windows Pop-up Blocked.wav"
Звук. Command = "Open"
Звук. Command = "Sound"
Звук. Command = "Close"
Результат. Text = Val(Число1.Text) * Val(Число. Text)
End Sub
Private Sub Кл_вычитания_Click()
Звук. FileName = "c:\Windows Pop-up Blocked.wav"
Звук. Command = "Open"
Звук. Command = "Sound"
Звук. Command = "Close"
Результат. Text = Val(Число1.Text) - Val(Число2.Text)
End Sub
Private Sub Кл_деления_Click()
Звук. FileName = "c:\Windows Pop-up Blocked.wav"
Звук. Command = "Open"
Звук. Command = "Sound"
Звук. Command = "Close"
Результат. Text = Val(Число1.Text) / Val(Число2.Text)
End Sub
Private Sub Кл_сложения_Click()
Звук. FileName = "c:\Windows Pop-up Blocked.wav"
Звук. Command = "Open"
Звук. Command = "Sound"
Звук. Command = "Close"
Результат. Text = Val(Число1.Text) + Val(Число2.Text)
End Sub
Private Sub Кл_умножения_Click()
Звук. FileName = "c:\Windows Pop-up Blocked.wav"
Звук. Command = "Open"
Звук. Command = "Sound"
Звук. Command = "Close"
Результат. Text = Val(Число1.Text) * Val(Число2.Text)
End Sub
Private Sub Плеер_Done(NotifyCode As Integer)
Плеер. DeviceType = "Sequencer"
Плеер. FileName = "c:\California_Love_2Pac.mid"
Плеер. Command = "Open"
Плеер. Command = "Play"
End Sub
Private Sub пункт_меню_Красный_Click()
Калькулятор. Picture = LoadPicture()
Калькулятор. BackColor = vbRed
End Sub
Private Sub пункт_меню_О_программе_Click()
MsgBox ("Программа создана в 2014 году")
End Sub
Private Sub пункт_меню_Синий_Click()
Калькулятор. Picture = LoadPicture()
Калькулятор. BackColor = vbBlue
End Sub
Private Sub Сброс_Click()
Звук. FileName = "c:\Windows Pop-up Blocked.wav"
Звук. Command = "Open"
Звук. Command = "Sound"
Звук. Command = "Close"
Число1.Text = ""
Число2.Text = ""
Результат. Text = ""
End Sub
2. Не вижу кода что бы кнопка "прыгала". Хотя реализуется достаточно просто - в процедуре события Click изменяем свойства кнопки Left и Top.
3. Оно конечно можно давать русские имена контролам и даже переменные писать русскими буквами, но все же надо привыкать писать так:
' Выбор пункта меню
Private Sub MenuRed_Click()
Calc. Picture = LoadPicture("c:\1.bmp") ' грузим картинку
Calc. BackColor = vbRed ' задаем цвет
End Sub
Да писать имена русскими символа не есть хорошо, но пока пишу так. Так в учебнике велено сделать так. Потом конечно буду писать пояснения рядом).
Прошу прощения за беспокойство, подскажи пожалуйста правильно ли я написал код для реализации задания?
Private Sub Кл_Вычитания_Click()
Кл_Вычитания. Left = 240
Кл_Вычитания. Top = 120
Кл_Вычитания. Caption = "Не трогай меня, я нервная! "
Звук. FileName = "c:\Windows Pop-up Blocked.wav"
Звук. Command = "Open"
Звук. Command = "Sound"
Звук. Command = "Close"
Результат. Text = Val(Число1.Text) - Val(Число2.Text)
End Sub
Private Sub Сброс_Click()
Звук. FileName = "c:\Windows Pop-up Blocked.wav"
Звук. Command = "Open"
Звук. Command = "Sound"
Звук. Command = "Close"
Число1.Text = ""
Число2.Text = ""
Результат. Text = ""
Кл_вычитания. Left = 3840
Кл_вычитания. Top = 1320
Кл_вычитания. Caption = "-"
End Sub
Ev Высший разум (118683) Вообще то, да. :) Можно даже написать так: Кл_Вычитания. Left = Кл_Вычитания. Left + 20 Кл_Вычитания. Top = Кл_Вычитания. Top + 20
у кнопки есть событие KeyPress, в нем проверяешь нажата ли нужная кнопка или нет, если нажата то меняешь положение кнопки
В этой программе имеются поле рисунка, флажок и несколько кнопок, которые используются для управления приложением. В этом учебнике показано, как добавить эти элементы управления.
В этом третьем учебнике вы научитесь следующему:
- Добавление элементов управления в приложение
- Добавление кнопок на панель макета
- Изменение имен и расположений элементов управления
- Добавление компонентов диалоговых окон
Предварительные требования
Материал этого учебника построен на знаниях, которые вы получили из предыдущего учебника Создание приложения для просмотра изображений. Если вы еще не выполнили действия из этого учебника, сделайте в первую очередь это.
Добавление элементов управления в приложение
Приложение "Средство просмотра изображений" использует элемент управления PictureBox для вывода изображения. Оно использует флажок и несколько кнопок для управления изображением и фоном, а также для закрытия приложения. Вы добавите элемент PictureBox и флажок из области панели элементов в Visual Studio IDE.
Запустите Visual Studio. Проект средства просмотра изображений находится в разделе Открыть последние.
В конструкторе Windows Forms выберите элемент управления TableLayoutPanel, добавленный в предыдущем учебнике. Убедитесь, что в окне Свойства отображается tableLayoutPanel1.
В левой части интегрированной среды разработки Visual Studio выберите вкладку Панель элементов. Если вы ее не видите, выберите пункт Представление > Панель элементов в строке меню или воспользуйтесь комбинацией клавиш CTRL+ALT+X. На панели элементов разверните узел Общие элементы управления.
Дважды щелкните элемент PictureBox, чтобы добавить в форму элемент управления PictureBox. Visual Studio IDE добавит элемент управления PictureBox в первую пустую ячейку TableLayoutPanel.
Щелкните новый элемент управления PictureBox, чтобы выбрать его, а затем щелкните черный треугольник на новом элементе управления PictureBox, чтобы отобразить его список задач.
Выберите Закрепить в родительском контейнере, который задает для свойства Dock элемента управления PictureBox значение Fill. Это значение отображается в окне Свойства.
В окне Свойства для элемента управления PictureBox задайте для свойства ColumnSpan значение 2. Теперь элемент управления PictureBox заполняет оба столбца.
Установите для его свойства BorderStyle значение Fixed3D.
В конструкторе Windows Forms выберите элемент управления TableLayoutPanel. Затем двойным щелчком выберите элемент CheckBox на панели элементов, чтобы добавить новый элемент управления CheckBox в следующую свободную ячейку таблицы. Элемент управления PictureBox занимает первые две ячейки в TableLayoutPanel, поэтому элемент управления CheckBox добавляется в нижнюю левую ячейку.
Выберите свойство Text и введите Stretch.
Добавление кнопок на панель макета
Мы добавили элементы управления в TableLayoutPanel. Далее показано, как добавить четыре кнопки в новую панель макета в TableLayoutPanel.
В форме выберите элемент управления TableLayoutPanel. Откройте Панель элементов, выберите Контейнеры. Дважды щелкните элемент управления FlowLayoutPanel для добавления нового элемента в последнюю ячейку TableLayoutPanel.
Присвойте свойству Dock элемента FlowLayoutPanel значение Fill. Это свойство можно задать, щелкнув черный треугольник и выбрав Закрепить в родительском контейнере.
Элемент управления FlowLayoutPanel является контейнером, в котором другие элементы управления размещаются построчно в определенном порядке.
Выберите новый элемент FlowLayoutPanel, а затем откройте Панель элементов и выберите Общие элементы управления. Дважды щелкните элемент Кнопки, чтобы добавить кнопку с именем button1.
Дважды щелкните элемент Кнопка, чтобы добавить еще одну кнопку. Интегрированная среда разработки вызывает следующий элемент button2.
Добавьте еще две кнопки таким же образом. Другой вариант — выберите button2, а затем выберите Правка > Копировать или нажмите клавиши CTRL+C. Далее в строке меню выберите Правка > Вставить (или нажмите клавиши CTRL+V). Порядок вставки копии кнопки. Повторите вставку еще раз. Обратите внимание на то, что в интегрированной среде разработки были добавлены кнопки button3 и button4 в FlowLayoutPanel.
Выберите первую кнопку и установите для ее свойства Text значение Показать рисунок.
Установите для свойства Text следующих трех кнопок значения Очистить рисунок, Установить цвет фона и Закрыть.
Чтобы изменить размер кнопок и расположить их, выберите элемент FlowLayoutPanel. Присвойте свойству FlowDirection значение RightToLeft.
Кнопки должны сами выровняться по правой стороне ячейки и изменить свой порядок таким образом, чтобы кнопка Показать рисунок располагалась с правой стороны. Можно перетаскивать кнопки в элементе FlowLayoutPanel, чтобы разместить их в любом порядке.
Щелкните кнопку Закрыть, чтобы выбрать ее. Затем выберите остальные кнопки, удерживая нажатой клавишу CTRL.
В окне Свойства задайте для свойства Авторазмер значение True. Размеры кнопок будут изменяться соответствии с текстом.
Вы можете запустить программу, чтобы увидеть, как выглядят элементы управления. Нажмите клавишу F5, выберите Отладка > Начать отладку или нажмите кнопку Запустить. Кнопки, которые вы добавили, пока еще не функционируют.
Переименование элементов управления
В форме нажмите кнопку Закрыть . Если все еще выделены все кнопки, для отмены выделения нажмите клавишу ESC.
В окне Свойства найдите (Name) . Измените имя на closeButton.
Интегрированная среда разработки не принимает имена, содержащие пробелы.
Переименуйте другие три кнопки как backgroundButton, clearButton, showButton. Имена можно проверить в раскрывающемся списке селектора элементов управления в окне Свойства . Отобразятся новые имена кнопок.
Можно переименовать любой элемент управления, например TableLayoutPanel или checkbox.
Добавление компонентов диалоговых окон
С помощью компонентов приложение может открывать графические файлы и выбирать цвет фона. Компонент аналогичен элементу управления. Для добавления компонента в форму используется панель элементов. Для задания значений свойств используется окно Свойства.
В отличие от элемента управления, добавление в форму компонента не добавляет в форму визуальный элемент. Вместо этого, компонент предоставляет определенное поведение, которое можно включать в коде. Например, это компонент, который открывает диалоговое окно Открыть файл.
В этом разделе добавьте в форму компоненты OpenFileDialog и ColorDialog.
Выберите конструктор Windows Forms (Form1.cs[Design] ). Затем откройте Панель элементов и выберите группу Диалоговые окна.
Дважды щелкните элемент OpenFileDialog, чтобы добавить в форму компонент с именем openFileDialog1.
Дважды щелкните на панели элементов элемент ColorDialog, чтобы добавить в форму компонент с именем colorDialog1. Компоненты отображаются в нижней части конструктора Windows Forms в виде значков.
Щелкните значок openFileDialog1 и задайте два свойства:
Установите для свойства Filter следующее значение:
Установите для свойства Title значение Выбор файла изображения.
Параметры свойства Filter определяют типы файлов, которые отображаются в диалоговом окне Выбор файла изображения.
Следующие шаги
Перейдите к следующему учебнику, чтобы узнать, как добавить код в приложение.
Урок №2 (Обработка событий, убегающая кнопка)
В этом уроке я постараюсь объяснить как создается обработка событий. Начнем с того что я поясню что такое событие. Событие (английское event ) - это как вы наверное догадались это такая ситуация, когда что-то происходит. Вот например вы нажали кнопку, и вот тут-то и происходит обработка этого события. В первом уроке как раз была обрабытка события нажатия на кнопку, я специально не стал вдаваться в подробности. Тем более сразу все запомнить невозможно.
Так вот, при определенных действиях пользователя ваше приложение вызывает определенные подпрограммы. Событий этих очень много, так что все мы рассматривать не будем, а рассмотрим в качестве примера простой пример.
Для этого откроем Delphi с новым проектом. Уменьшим размеры главной формы. Предлагаю сделать следующие установки. Для этого в свойствах формы установим ее размеры ширина ( Width ) и высота ( Height) )присвоим значение 300, этого вполне достаточно. У нас получилось квадратное окно. В нем мы разместим кнопку. Свойство надпись ( Caption ) предлагаю поменять на "выход". Еще вы освоите команду закрытия приложения. Вы можете так же поменять заголовок формы на такой какой хотите, что бы не портить вид нашего приложения. И у вас должно получится примерно то же самое, что у меня на картинке слева.
Теперь, после того как мы закончили разработку дизайна программы необходимо уже переходить собственно к программированию. Конечно дизайн довольно примитивный но пока ограничимся этим.
Теперь необходимо еще раз создать обработчик событий для события OnClick , надеюсь Вы еще помните как это делается. В появившемся тексте подпрограммы :
. . .
procedure TForm1.Button1Click(Sender: TObject);
begin
Между операторами begin и end записываем команду Close;
После этого давайте добавим еще один обработчик события. На этот раз это будет OnMouseMove это события возникает при движении мышки над кнопкой, причем кроме просто вызова подпрограммы этого события туда передаются еще и координаты мышки относительно левого верхнего края кнопки. Создав обработчик события допишите в него следующий программный код. Чуть позже я объясню что оно означает.
procedure TForm1.Button1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
if abs(Y - Button1.Height div 2) < abs(X - Button1.Width div 2) then
if X - Button1.Width div 2 < 0 then Button1.Left := Button1.Left + X
else Button1.Left := Button1.Left - (Button1.Width - X)
else
if Y - Button1.Height div 2 < 0 then Button1.Top := Button1.Top + Y
else Button1.Top := Button1.Top - (Button1.Height - Y)
end;
После того как добавите этот код запустите ваше приложение и понаблюдайте как кнопка будет убегать от мышки, по полю формы. курсор практически невозможно навести на кнопку. Теперь небольшие пояснения.
В данной подпрограмме очень эффективно применяется условные оператор if , о нем можно прочитать в словаре, к нему же относится else . Так же применяются свойства кнопок, а именно Button1.Width определение ширины кнопки1, и Button1.Height - определение ее высоты. Оператор div служит для деления. Координаты X и Y - это координаты мышки которые передаются в программу. abs - функция вычисляющая модуль
В циклах происходят не сложные математические вычисления, которые с первого взгляда выглядят очень страшновато. Но поняв что делает каждая функция можно без труда разобраться. В данном примере я специально применял чтение свойств кнопки (Button1.Top , Button1.Left , Button1.Height , Button1.Width) что бы сделать программу более универсальной. Можно было вместо них ввести и точные значения. Это выглядело бы очень хорошо вот сравните :
procedure TForm1.Button1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
if abs(Y - 12) < abs(X - 37) then
if X - 37 < 0 then Button1.Left := Button1.Left + X
else Button1.Left := Button1.Left - (75 - X)
else
if Y - 12 < 0 then Button1.Top := Button1.Top + Y
else Button1.Top := Button1.Top - (25 - Y)
end;
Программы стала попроще, но если вы теперь измените размеры кнопки то программа уже не будет работать и вам придется ее исправлять подставляя новые значения. Так что подумайте. И мой совет на будущее никогда не используйте точные числа в своих программах, ведь эти числа вы не просто придумали, а взяли опираясь на что-то. Значит эти числа можно откуда-то взять программе самой, может быть вычислить. Причем желательно сразу предусмотреть, что бы Ваша программа прекрасно работала при нескольких возможных рабочих значениях, проверить ее работу на особо критичных моментах И тогда Вам придется делать меньше работы когда вы что-то измените, Ваши программы будут универсальными.
Читайте также: