Исходники приложений windows forms

Here are
164 public repositories
matching this topic…

Notepad++ Editor is one of the most important programs on any computer that everyone uses every day. The most popular and popular editor in Windows operating systems is Notepad, which is definitely familiar to everyone.

  • Updated
    May 27, 2023


  • C#

It is a desktop application. Admin can entry category, company, stock in, stock out all information easily and view individual report.

  • Updated
    Sep 3, 2019


  • C#

Multithreading In C#

  • Updated
    Dec 14, 2019


  • C#

ResumeBuilder

  • Updated
    Feb 7, 2024


  • C#

ArdeshirV.Forms is a customized version of everyday windows .Net forms like About Box, Error Handler, Splash Screen and my base windows form with many fantastic ability.

  • Updated
    Feb 5, 2025


  • C#

🎯 Um simples CRUD feito com C# (Windows Form Application) e MySQL

  • Updated
    Jan 31, 2020


  • C#

Translator solution created in Visual Studio using .NET Framework, C# and Google Cloud Translation API.

  • Updated
    Apr 25, 2021


  • C#

Work Features of a Manager in Hotel Management System. Login, Universal Search field where the manager can search using any data type, CRUD an entry of a customer, Room Availability & Reservation, Room bill Payment, Food Service (Order food and add to bill), Bill Generation in pdf format

  • Updated
    Jul 26, 2022


  • C#

A Windows Forms library for solving real life problems.

  • Updated
    Jul 23, 2019


  • C#

Kullanıcıların sinema bileti satın alabileceği uygulama.

  • Updated
    Jun 17, 2022


  • C#

Major Project for 2nd-year ITP module in SLIIT BSc(Hons) in Information Technology Specializing in Software Engineering.

  • Updated
    Apr 23, 2020


  • C#

A KUCSA Association desktop depicting afew operations of the club. Demonstrates some usage of CSharp in real-world-app

  • Updated
    Apr 28, 2017


  • C#

A project that recreates the classic Super Mario Bros game using C# and Visual Studio’s Windows Forms Application platform. A modern interpretation of a timeless classic!

  • Updated
    Jul 27, 2023


  • C#

A simple project that reads data from pulse meter CMS50D+ in real time and displays it in a chart.

  • Updated
    Apr 19, 2017


  • C#

Goal to make this APP is to Track all the activities of Students,Trainers details. Allows to report generation for analysys.

  • Updated
    Aug 8, 2018


  • C#

This is a windows form game which work with TCP protocol.

  • Updated
    Sep 8, 2021


  • C#

This project presents a simple Chat Message Service and Client Application demonstration. The Chat Service is a self-hosted (service host) WCF application launched and managed with a simple console interface. The service prints to the console window the user activities (log on, log off) and what messages are sent to users. The client “tester” ha…

  • Updated
    Nov 5, 2019


  • C#

Uygulamanın Amacı;Otel Otmasyonunun masaüstü uygulaması olarak geliştirilmesi. Kullanılan Teknolojiler: C#, Visual Studio, Sql Server Management Studio, Ado.Net, N-Tier Katmanlı Mimari

  • Updated
    Dec 8, 2017


  • C#

CricBlast

C# Cricket Game project with a stunning UI and a nice game algorithm developed to demonstrate OOP concepts and many other things.

  • Updated
    Feb 29, 2024


  • C#

russian-checkers

Russian checkers on C# with mini-max and alpha-beta pruning

  • Updated
    May 28, 2022


  • C#

Improve this page

Add a description, image, and links to the
windows-form-application
topic page so that developers can more easily learn about it.

Curate this topic

Add this topic to your repo

To associate your repository with the
windows-form-application
topic, visit your repo’s landing page and select «manage topics.»

Learn more

Оглавление:

  1. Windows Forms приложение на языке F#
  2. Перестройка консольного приложения
  3. Структура кода приложения
  4. Модуль инициализации элементов управления
  5. Модуль создания формы приложения
  6. Модуль рабочего кода приложения
  7. Модуль запуска работы приложения
  8. Исходник Windows Forms F#

Windows Forms приложение на языке F#

Приложение Windows Forms на языке программирования F#

Приложение Windows Forms создано на основе консольной F# программы. Код приложения разделён на несколько логических модулей. Модули инициализации элементов управления и формы сгруппированы в отдельной папке. Программный код интерактивности приложения также вынесен в отдельный модуль. Такое построение напоминает разделённый на частичные классы приложение языка C#. В приложение добавлен простейший код F# для демонстрации интерактивности приложения.

На основе предлагаемого приложения можно заниматься изучением языка программирования F#. В оконном приложении гораздо нагляднее смотрятся результаты функций и выражений. Кроме того, на основе данного исходника, можно создавать вполне работоспособные приложения на языке F#.

Перестройка консольного приложения

Изменить файл проекта в Visual Studio

Прежде всего в интегрированной среде программирования MS Visual Studio 2019 создаётся консольное приложение для языка F#. На данный момент для приложения выбрана максимальная целевая платформа .NET5.

Для поддержки функционирования каркаса Windows Forms в файле проекта консольного приложения необходимо сделать соответствующие изменения. В 16 версии Visual Studio нет возможностей визуального добавления поддержки платформы Windows Forms для проектов языка F# (появилась в 17 версии студии), поэтому изменим файл проекта вручную, в встроенном текстовом редакторе. В окне обозревателя решений щелкаем правой кнопкой мыши над именем проекта и в появившемся диалоговом окне вызываем текстовый редактор для файла проекта.

В окне текстового редактора отобразится следующая XML-разметка:

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>net5.0</TargetFramework>
    <WarnOn>3390;$(WarnOn)</WarnOn>
  </PropertyGroup>

  <ItemGroup>
    <Compile Include="Program.fs" />
  </ItemGroup>

</Project>

Код, заключенный в теге элемента PropertyGroup следует заменить как показано ниже в листинге изменённой XML-разметки файла проекта:

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <OutputType>WinExe</OutputType>
    <TargetFramework>net5.0-windows</TargetFramework>
    <UseWindowsForms>true</UseWindowsForms>
  </PropertyGroup>

  <ItemGroup>
    <Compile Include="Program.fs" />
  </ItemGroup>

</Project>

После перезагрузки проекта, в обозревателе решений, в зависимостях проекта, можно увидеть добавленную платформу Microsoft.Windows.Desktop.App.WindowsForms для поддержки оконных элементов.

Структура кода приложения

Структура кода приложения F# Windows Forms

Структура предлагаемого приложения Windows Forms на языке F# состоит из четырех файлов-модулей. Три файла — InitControls.fs, FormModule.fs, CodeFormModule.fs — формируют код формы и находятся в одном пространстве имён. Один — Program.fs — это общий файл запуска приложения. Файлы — InitControls.fs, FormModule.fs — в которых происходит инициализация формы и элементов управления сгруппированы в папку.

Файл формы CodeFormModule.fs, предназначенный для рабочего кодирования, вынесен за пределы папки формы. Такое построение структуры модулей позволило отделить код инициализации формы и визуальных элементов управления от программного кода бизнес-логики приложения.

Модуль в контексте языка программирования F# — это основной способ группирования логически связанного программного кода. Модули могут представлять из себя отдельные файлы или же в одном файле можно объявить несколько модулей. Описываемая структура приложения создавалась именно с целью распределить логически родственные коды F# по отдельным модулям приложения.

Модуль инициализации элементов управления

InitControls.fs — файл-модуль F# объявления и инициализации элементов управления перед добавлением в главную форму приложения. Модуль содержит несколько функций, составные выражения которых возвращают полностью подготовленные элементы для размещения на форме.

Для примера взяты табличный контейнер TableLayoutPanel и четыре кнопки Button, динамически размещаемые в ячейках табличного элемента управления.

Листинг кода модуля InitControls.fs:

namespace MyWindowsForm

open System.Windows.Forms
open System.Drawing

module InitControls = 

// --- Объявление и инициализация свойств элементов управления ---

    // Виды кнопок.
    let standardButton = Size(100, 70)
    let plumpButton = Size(200,200)

    let tableLayoutPanel = 
        let tlp = new TableLayoutPanel()
        tlp.CellBorderStyle <- TableLayoutPanelCellBorderStyle.Single
        tlp.ColumnCount <- 2
        tlp.RowCount <- 2
        tlp.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 50F)) |> ignore
        tlp.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 50F)) |> ignore
        tlp.RowStyles.Add(new RowStyle(SizeType.Percent, 50F)) |> ignore
        tlp.RowStyles.Add(new RowStyle(SizeType.Percent, 50F)) |> ignore
        tlp.Dock <- DockStyle.Fill
        tlp.Name <- "tlp"
        tlp

    let button1 = 
        let btn = new Button()
        btn.Name <- "button1"
        btn.Size <- standardButton
        btn.TabIndex <- 0
        btn.Text <- "button1"
        btn.Anchor <- AnchorStyles.None
        btn.BackColor <- Color.BlueViolet
        btn

    let button2 = 
        let btn = new Button()
        btn.Name <- "button2"
        btn.Size <- standardButton
        btn.TabIndex <- 1
        btn.Text <- "button2"
        btn.Anchor <- AnchorStyles.None
        btn.BackColor <- Color.Chartreuse
        btn

    let button3 = 
        let btn = new Button()
        btn.Name <- "button3"
        btn.Size <- standardButton
        btn.TabIndex <- 2
        btn.Text <- "button3"
        btn.Anchor <- AnchorStyles.None
        btn.BackColor <- Color.CadetBlue
        btn

    let button4 = 
        let btn = new Button()
        btn.Name <- "button4"
        btn.Size <- standardButton
        btn.TabIndex <- 3
        btn.Text <- "button4"
        btn.Anchor <- AnchorStyles.None
        btn.BackColor <- Color.BurlyWood
        btn

Модуль создания формы приложения

Модуль FormModule.fs предназначен для объявления собственного класса MyForm формы приложения. В этом же модуле создаётся объект MyForm и к нему добавляются элементы управления предварительно инициированные в модуле InitControls.fs.

Для формирования внешнего вида приложения элементы добавляются к форме внутри поля между спаренными методами SuspendLayout()ResumeLayout(). Данные методы исключают повторы перерасчета макета формы при добавлении каждого элемента и запускают формирование макета только после вызова метода ResumeLayout(). Конечно, если форма состоит из нескольких элементов, спаренные методы заметно не увеличивают производительность. Но с учётом возможного роста создаваемого проекта приложения, такое построение кода создания формы всё же желательно использовать, тем более что накладные расходы при вызовах SuspendLayout()ResumeLayout() не существенны.

Программный код модуля формы FormModule.fs:

namespace MyWindowsForm

open System.Windows.Forms
open System.Drawing
open InitControls

module FormModule =

// --- Модуль создания и инициализации формы ---

    type MyForm() =
        inherit Form()
        do
            base.Text <- "Windows Form F#"
            base.StartPosition <- FormStartPosition.CenterScreen
            base.Size <- new Size(800, 600)
            base.TopMost <- true

    // Создаем собственную форму.
    let myForm = new MyForm()

    // Приостановка работы макетов.
    // Приостановка актуальна при большом количестве визуальных элементов.
    // Уменьшает время визуализации формы.
    tableLayoutPanel.SuspendLayout()
    myForm.SuspendLayout()


    // Кнопки добавляются в контейнер TableLayoutPanel.
    tableLayoutPanel.Controls.Add(button1, 0, 0)
    tableLayoutPanel.Controls.Add(button2, 1, 0)
    tableLayoutPanel.Controls.Add(button3, 1, 1)
    tableLayoutPanel.Controls.Add(button4, 0, 1)
    tableLayoutPanel.Controls.Add(button4, 0, 1)

    // Код для исследования работы тандема методов 
    // SuspendLayout() - ResumeLayout()
    // Если раскомментировать данный код и
    // закомментировать вызовы SuspendLayout(), ResumeLayout(),
    // можно заметить задержку показа формы.
    // Если  только раскомментировать этот код 
    // визуализация формы происходит значительно быстрее.
    (* 
    for i = 0 to 2000 do
        let btn = new Button()
        btn.Name <- "button" + (i+10).ToString()
        btn.Size <- new Size(220, 120)
        btn.Text <- "button4"
        btn.Anchor <- AnchorStyles.None
        btn.Dock <- DockStyle.None
        tableLayoutPanel.Controls.Add(btn, 0, 1)
        *)

    // Добавляем таблицу на форму.
    myForm.Controls.Add(tableLayoutPanel)


    // Возобновляем работу макетов.
    tableLayoutPanel.ResumeLayout(false);
    myForm.ResumeLayout(false);

Модуль рабочего кода приложения

Модуль F# CodeFormModule.fs предназначен для рабочего кода приложения, это модуль взаимодействия элементов управления и бизнес-логики приложения.
Здесь находятся методы обработки событий компонентов формы, здесь же осуществляется изменение свойств элементов и формы для обеспечения интерактивности программы.

namespace MyWindowsForm

open System
open System.Windows.Forms
open InitControls
open FormModule
open System.Drawing

// --- Модуль рабочего кода формы ---

module Code = 
    
    let myCodeForm = myForm
    myCodeForm.Text <- "Выполнение модуля CodeFormModule"

    button1.Text <- "Первая кнопка"
    button2.Text <- "Вторая кнопка"
    button3.Text <- "Третья кнопка"
    button4.Text <- "Четвертая кнопка"

    // Определение вида кнопки.
    let isStandart (btn: Button) : bool = btn.Size = standardButton
    
    // Обработчик события нажатия для всех кнопок
    let buttons_Click (sender:System.Object) (e:System.EventArgs) : unit = 
        let button: Button = sender :?> Button

        if button = button1 then Console.Beep(300, 300)
        if button = button2 then Console.Beep(500, 300)
        if button = button3 then Console.Beep(1000, 300)
        if button = button4 then Console.Beep(3000, 300)
 
        // Если кнопка стандартная, то делаем её пухлой,
        // и наоборот.
        if isStandart button then
            button.Size <- plumpButton
        else
            button.Size <- standardButton

    // Подключение обработчиков событий 
    button1.Click.AddHandler( new System.EventHandler(buttons_Click) )
    button2.Click.AddHandler( new System.EventHandler(buttons_Click) )
    button3.Click.AddHandler( new System.EventHandler(buttons_Click) )
    button4.Click.AddHandler( new System.EventHandler(buttons_Click) )
    

Модуль запуска работы приложения

В модуле F# Program.fs находится код настроек и запуска приложения.

open System.Windows.Forms
open MyWindowsForm

// Стили элементов управления для поддержки тем операционной системы.
Application.EnableVisualStyles()

// Режим отображения текста в окнах приложения.
// Улучшает качество отображения строк.
// Повышает графическую производительность приложения.
Application.SetCompatibleTextRenderingDefault(false)
    
// Запускает стандартный цикл обработки сообщений приложения 
// в текущем потоке и делает указанную форму видимой.
Application.Run(Code.myCodeForm)

Исходник Windows Forms F#

Исходник написан в интегрированной среде программирования MS Visual Studio 2019, тестировался в Visual Studio 2022 Preview 4.

Скачать исходник

Тема: «WinForms F# — интерактивное приложение»

WinAppFSharp-vs17.zip
Размер:1482 КбайтЗагрузки:221

Потоки в Visual C++ — Пример реализации и использования

Рассмотрим создание потоков на языке Visual C++. На примере программы в Visual Studio разберем основы и применение необходимых классов. В конце урока вы найдете видео, в котором тема раскрывается более подробно.

Стиль Material Design в Windows Forms

В видеоуроке рассказывается, как заменить стандартную тему оформления Windows Forms на стиль Material Design от Google. Проект создается на языке программирования C#.

Печать документов на C# — Программный вывод текста на принтер

Несомненно в языке C# и фреймворке .NET есть средства для печати документов и текста с помощью принтера. В данной статье описано, как вывести на печать текст программно. А для тех, кто больше любит смотреть, чем читать — в конце материла находится видеоурок…

Вывод изображений в ListView

Компонент ListView (из Windows Forms) предназначен для вывода текстовых данных. Создавая столбцы в нем, нельзя выбирать тип данных (например, изображения). Тем не менее способ вывода изображений в элемент управления ListView существует. Рассмотрим его на примере.

MS Access и C# — работаем с базой данных из программы Windows Forms

Рассмотрим выполнение запросов SELECT, INSERT, UPDATE и DELETE к базе данных Microsoft Access из программы на языке C#, на примере проекта Windows Forms в Visual Studio. В конце статьи вы найдете исходники, а также видеоурок по данной теме.

Вывод данных в DataGridView из БД на C#

В Windows Forms табличные данные удобно выводить с помощью элемента управления DataGridView. В статье покажем, как это сделать на примере таблицы из базы данных и языка программирования C#.

Преобразование цветного изображения в черно-белое C#

В статье рассмотрим алгоритм перевода цветного изображения в черно-белое и напишем его реализацию на языке C#. Приводится исходный код программы, написанной в Visual Studio — приложение Windows Forms.

Растянуть элементы на форме Windows Forms

В статье рассмотрим способ создания «резинового» интерфейса в формах Windows Forms и разберёмся, как растянуть элементы на форме при изменении размера окна программы.

Перенос строки в TextBox с Multiline

Покажем, как выполнить перенос строки в TextBox с атрибутом Multiline (когда текстовое поле занимает несколько строк). Сделаем это на примере программы в Windows Forms и языка C#.

Работа с API Яндекс Переводчика

Научимся работе с API на языке программирования C#. В этом уроке мы напишем программу в Visual Studio на Windows Forms, которая будет переводить текст с русского языка на английский и обратно при помощи веб-запросов к API Яндекс Переводчика. Также можно…

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
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
// Автор:ValeraGin ICQ:583890030 E-Mail:valeragin@gmail.com Дата:16.08.2009
#apptype windows
#reference 'System.Windows.Forms.dll'
#reference 'System.Drawing.dll'
 
#mainresource 'SimpleCalc.res'
 
uses 
  System.Windows.Forms,
  System.Drawing;
  
const 
  /// максимальное количество символов в Edit'e
  MaxCountSymbolsInEdit = 24;
  
  /// отступ кнопок от левого края  
  XIndent = 5; 
  /// Отступ кнопок от верхнего края  
  YIndent = XIndent+37+XIndent;
  /// ширина кнопок 
  ButtonWidth = 55; 
  /// высота кнопок
  ButtonHeigth = 40; 
  /// промежуток между кнопками
  ButtonInterval = 6;  
  /// Размер шрифта для кнопок
  ButtonFontSize = 14;
  
  FormClientWidth = XIndent+(ButtonWidth*5)+(ButtonInterval*4)+XIndent;
  FormClientHeigth = YIndent+(ButtonHeigth*5)+(ButtonInterval*4)+XIndent;
  
  
 
  // цвета кнопок
  NumbersColor = Color.FloralWhite;
  FunctionColor = Color.AntiqueWhite;
  MemoryColor = Color.LightGray;
  CEColor = Color.PowderBlue;
 
  VK_Enter = 13;
  VK_Back = 8;
  VK_Add = 107; 
  VK_Subtract = 109;
  VK_Divide = 111;
  VK_Multiply = 106;
  
  
type
  Buttons =
    (bMemoryAdd, bMemorySubstract, bMemoryClear, bMemoryRecall, bPlus,
     bSqrt, d7, d8, d9, bDivision,
     bPow, d4, d5, d6, bMultiplication,
     b1x, d1, d2, d3, bSubtraction,
     bClear, d0, bPoint, bExactly,  bAddition);
  TAction  = (None, Addition, Subtraction, Multiplication, Division);
    
var
  CalcForm: Form;
  ResultEdit: TextBox;
  Memory: real;
  SaveLastNumber: real;
  CurrentAction:=None;
  NeedClearEdit: boolean;
  
  LastAction:=None;
  LastNumber: real;
  
  ButtonsArray: array of button; 
  ButtonsColor: array of color := 
  (MemoryColor,     MemoryColor,   MemoryColor,     MemoryColor,         FunctionColor,
   FunctionColor,   NumbersColor,  NumbersColor,    NumbersColor,        FunctionColor,
   FunctionColor,   NumbersColor,  NumbersColor,    NumbersColor,        FunctionColor,
   FunctionColor,   NumbersColor,  NumbersColor,    NumbersColor,        FunctionColor,
   CEColor,         NumbersColor,  NumbersColor,    FunctionColor,       FunctionColor); 
    
  ButtonsNames: array of string := 
   ('MS', 'M-', 'MC', 'MR', '+/-',
    '√‾', '7', '8', '9', '/',
    'x²', '4', '5', '6', '*',
    '1/x', '1', '2', '3', '-',
    'CE', '0', '.', '=', '+');
 
procedure DoExactly;
begin
  if CurrentAction<>none then 
  begin
    if SaveLastNumber<>0 then 
    begin
      var NowReal: real;
      if TryStrToFloat(ResultEdit.Text, NowReal) then 
      begin
        if not ((NowReal=0) and (CurrentAction=Division)) then 
        begin
          var ResultOperation: real;
          case CurrentAction of 
            Addition:       ResultOperation:=SaveLastNumber+NowReal;
            Subtraction:    ResultOperation:=SaveLastNumber-NowReal;
            Multiplication: ResultOperation:=SaveLastNumber*NowReal;
            Division:       ResultOperation:=SaveLastNumber/NowReal; 
          end;
          ResultEdit.Text:=FloatToStr(ResultOperation);
          NeedClearEdit:=True;
        end 
        else
        begin
          ResultEdit.Text:='Ошибка!';
          NeedClearEdit:=True;
        end;
      end;
    end;
  end 
  else
    if (LastAction<>none) and (LastNumber<>0) then
    begin
      var NowReal: real;
      if TryStrToFloat(ResultEdit.Text, NowReal) then 
      begin
        if not ((LastNumber=0) and (LastAction=Division)) then 
        begin
          var ResultOperation: real;
          case LastAction of 
            Addition:       ResultOperation:=NowReal+LastNumber;
            Subtraction:    ResultOperation:=NowReal-LastNumber;
            Multiplication: ResultOperation:=NowReal*LastNumber;
            Division:       ResultOperation:=NowReal/LastNumber; 
          end;
          ResultEdit.Text:=FloatToStr(ResultOperation);
          NeedClearEdit:=True;
        end 
        else
        begin
          ResultEdit.Text:='Ошибка!';
          NeedClearEdit:=True;
        end;
      end;
    end;
  CurrentAction:=None; 
end;
 
procedure SetArithmeticOperations(Action: TAction);
begin
  if (CurrentAction<>None) and (not NeedClearEdit) then DoExactly;
  if ResultEdit.Text.Length<>0 then 
  begin
    if TryStrToFloat(ResultEdit.Text, SaveLastNumber) then 
    begin
      NeedClearEdit:=True;
      CurrentAction:=Action; 
      LastAction:=Action;
      LastNumber:=SaveLastNumber;
    end;  
  end;   
end;
 
procedure AddSymbolToEdit(ch: char);
begin
  if NeedClearEdit then
  begin
    if ch='.' then exit;
    ResultEdit.Text:='';
    NeedClearEdit:=False;
  end;
  if (ResultEdit.Text.Length>MaxCountSymbolsInEdit) then exit;
  if char.IsNumber(ch) then
  begin
    if ResultEdit.Text='0' then 
      ResultEdit.Text:=ch 
    else
      ResultEdit.Text+=ch
  end
  else if ch = '.' then if (ResultEdit.Text.IndexOf('.')=-1) then ResultEdit.Text+=ch;
end;
 
// Событие при нажатие на любую кнопку
procedure ButtonOnClick(sender: Object; e: System.EventArgs);
begin
  case Buttons(System.&Array.IndexOf(ButtonsArray, (sender as Button))) of
     d0: AddSymbolToEdit('0');
     d1: AddSymbolToEdit('1');
     d2: AddSymbolToEdit('2');
     d3: AddSymbolToEdit('3');
     d4: AddSymbolToEdit('4');
     d5: AddSymbolToEdit('5');
     d6: AddSymbolToEdit('6');
     d7: AddSymbolToEdit('7');
     d8: AddSymbolToEdit('8');
     d9: AddSymbolToEdit('9');
     bPoint: AddSymbolToEdit('.');
     bClear:
       begin
         CurrentAction:=None;
         SaveLastNumber:=0;
         ResultEdit.Text:='0';
       end;
     bAddition: 
       begin
         SetArithmeticOperations(Addition);
       end;  
     bSubtraction: 
       begin
         SetArithmeticOperations(Subtraction);
       end;  
     bMultiplication: 
       begin
         SetArithmeticOperations(Multiplication);
       end;
     bDivision: 
       begin
         SetArithmeticOperations(Division);
       end;      
      bSqrt: 
       begin         
         var r: real;
         if TryStrToFloat(ResultEdit.Text, r) then
           ResultEdit.Text:=FloatToStr(sqrt(r));
       end;
      bPow: 
       begin         
         var r: real;
         if TryStrToFloat(ResultEdit.Text, r) then
           ResultEdit.Text:=FloatToStr(r*r);
       end; 
       
      b1x: 
       begin         
         var r: real;
         if TryStrToFloat(ResultEdit.Text, r) then
           ResultEdit.Text:=FloatToStr(1/r);
       end;          
     bExactly: 
       begin
         DoExactly;
       end;
     bMemoryAdd: 
       begin
         if ResultEdit.Text.Length<>0 then 
         begin
           if Memory=0 then 
           begin
             if TryStrToFloat(ResultEdit.Text, Memory) then 
             begin
               if Memory<>0 then 
               begin
                 ButtonsArray[0].Text:='M+';
                 ButtonsArray[1].Enabled:=True;
                 ButtonsArray[2].Enabled:=True;
                 ButtonsArray[3].Enabled:=True;
               end;  
             end;
           end else
             Memory+=StrToFloat(ResultEdit.Text);
         end;
       end;
      bMemorySubstract: 
       begin
         if ResultEdit.Text.Length<>0 then 
         begin
           if Memory<>0 then 
           begin
             var r: real;
             if TryStrToFloat(ResultEdit.Text, r) then 
             begin
               Memory-=r;
               if Memory=0 then 
               begin
                 ButtonsArray[0].Text:='MS';
                 ButtonsArray[1].Enabled:=False;
                 ButtonsArray[2].Enabled:=False;
                 ButtonsArray[3].Enabled:=False;
               end;
             end;
           end;
         end;
       end;       
     bMemoryRecall: 
       begin
         if Memory<>0 then
           ResultEdit.Text:=FloatToStr(Memory);
       end;
     bMemoryClear:  
       begin
         ButtonsArray[0].Text:='MS';
         ButtonsArray[1].Enabled:=False;
         ButtonsArray[2].Enabled:=False;
         ButtonsArray[3].Enabled:=False;
         Memory:=0;
       end; 
     bPlus: 
       begin
         if ResultEdit.Text[1]<>'-' then 
           ResultEdit.Text:=ResultEdit.Text.Insert(0, '-')
         else ResultEdit.Text:=ResultEdit.Text.Remove(0, 1);
       end; 
  end;
end;
 
procedure OnKeyPress(sender: Object; e: KeyPressEventArgs);
begin
  if ((char.IsNumber(e.KeyChar)) or (e.KeyChar = '.')) then AddSymbolToEdit(e.KeyChar);
  case ord(e.KeyChar) of 
    VK_Back:
      if (ResultEdit.Text.Length>0) and (ResultEdit.Text<>'0') then 
      begin
        ResultEdit.Text := ResultEdit.Text.Substring(0,ResultEdit.Text.Length-1);
        if ResultEdit.Text.Length=0 then ResultEdit.Text:='0';
      end;  
    VK_Enter:DoExactly;
    VK_Add:SetArithmeticOperations(Addition);
    VK_Subtract:SetArithmeticOperations(Subtraction);
    VK_Multiply:SetArithmeticOperations(Multiplication);
    VK_Divide:SetArithmeticOperations(Division);
  end;
end;
 
procedure OnEnter(sender: Object; e: System.EventArgs);
begin
  CalcForm.ActiveControl := nil;
end;
 
procedure InitControls;
begin
  // Создаем TEdit
  ResultEdit := new TextBox;
  ResultEdit.RightToLeft:=RightToLeft.Yes;
  ResultEdit.BackColor:=Color.White;
  ResultEdit.SetBounds(XIndent, XIndent, FormClientWidth-(XIndent*2), 30);
  ResultEdit.Font:=new Font(new FontFamily('Tahoma'), 16, FontStyle.Regular);
  ResultEdit.KeyPress+=OnKeyPress;
  ResultEdit.ReadOnly := True;
  ResultEdit.TabStop := False;
  ResultEdit.Enter += OnEnter;
  ResultEdit.Text:='0';
  CalcForm.Controls.Add(ResultEdit);
  
  
  // Создаем кнопки
  var XPos:=XIndent;
  var YPos:=YIndent;
  SetLength(ButtonsArray, Length(ButtonsNames));
  var ButtonFont:=new Font(new FontFamily('Tahoma'), ButtonFontSize, FontStyle.Regular);
  for var i:=0 to Length(ButtonsNames)-1 do
  begin
    ButtonsArray[i]:= new Button;
    ButtonsArray[i].SetBounds(XPos, YPos, ButtonWidth, ButtonHeigth);
    ButtonsArray[i].Click+=ButtonOnClick;
    ButtonsArray[i].KeyPress+=OnKeyPress;
    ButtonsArray[i].Text:=ButtonsNames[i];
    ButtonsArray[i].Font:=ButtonFont;
    ButtonsArray[i].BackColor:=ButtonsColor[i];
    ButtonsArray[i].TabStop := False;
    ButtonsArray[i].Enter += OnEnter;
    if (Buttons(i)=bMemoryRecall) or (Buttons(i)=bMemorySubstract) or (Buttons(i)=bMemoryClear) then ButtonsArray[i].Enabled:=False;
    CalcForm.Controls.Add(ButtonsArray[i]);
    
    // Определяем координаты следующей кнопки, которая будет создана
    XPos:=XPos+ButtonInterval+ButtonWidth;
    if (((i+1) mod 5)=0) and (i<>0) then
    begin
      XPos-=((ButtonInterval+ButtonWidth)*5);
      YPos+=ButtonInterval+ButtonHeigth;
    end;
  end;
end;
 
begin
  // Создаем форму
  CalcForm := new Form;
  CalcForm.Text := 'Simple Calculator';
  CalcForm.ClientSize:= new Size(FormClientWidth,FormClientHeigth);
  CalcForm.FormBorderStyle:=FormBorderStyle.FixedSingle; 
  CalcForm.MaximizeBox:=False;
  CalcForm.BackColor:=Color.White;
  CalcForm.KeyPress+=OnKeyPress;
  
  // Добавлем на неё компоненты
  InitControls;
   
  // Включаем тему WinXP
  Application.EnableVisualStyles;
  
  // Запускаем приложение
  Application.Run(CalcForm);
end.

Программа написана на языке программирования C#. Среда разработки Visual Studio 2015. 

Курсовой проект состоит из отдельных четырех задач из книги Волкова А.И.Программирование (Visual C#). Практикум по освоению методов и приемовразработки программ.– М.: МЭСИ, 2015.– 62 с.

Задачи:

1. Сортировка выбором

Сортировка одномерного массива по убыванию методом выбора и вывод результата на экран.

В приложении предусмотреть возможность ввода одномерного массива:

– генерацией массива из заданного количества случайных целых чисел, равномерно распределенных в заданном диапазоне;

– вводом из существующего текстового файла;

– вводом с клавиатуры в текстовое поле исходного массива. 

В приложении предусмотреть возможность вывода одномерного массива:

– в текстовое поле в приложении

– в текстовый файл

2. Поиск элемента в матрице

Определить номера строк матрицы порядка N * M, в которых хотя бы один элемент равен заданному числу C, после чего умножить элементы данных строк на заданное число D.

В приложении предусмотреть возможность ввода двумерного массива:

– генерацией массива из заданного количества случайных целых чисел, равномерно распределенных в заданном диапазоне;

– вводом из существующего текстового файла;

– вводом с клавиатуры в текстовое поле исходного массива. 

В приложении предусмотреть возможность вывода двумерного массива:

– в текстовое поле в приложении

– в текстовый файл

3. Системы счисления

Реализовать набор подпрограмм для выполнения следующих операций над натуральными числами в Р-ичной системе счисления (2≤P≤9):

а) сложение, вычитание, умножение, деление;

б) перевод из десятичной системы счисления в Р-ичную;

в) перевод из Р-ичной системы счисления в десятичную;

г) функция проверки правильности записи числа в Р-ичной системе счисления;

д) функции, реализующие операции отношения (равно, не равно, больше или равно,

меньше или равно, больше, меньше).

  • Возвести число в степень (основание и показатель степени записаны в Р-ичной системе счисления). Ответ выдать в Р-ичной и десятичной системах счисления.
  • Дан массив А — массив чисел, записанных в Р-ичной системе счисления. Отсортировать его в порядке убывания. Ответ выдать в Р-ичной и десятичной системах счисления.

В приложении предусмотреть возможность ввода числа:

– вводом из существующего текстового файла;

– вводом с клавиатуры в текстовое поле.

В приложении предусмотреть возможность вывода числа:

– в текстовое поле в приложении

– в текстовый файл

4. Поиск слова в тексте

Дана строка, содержащая текст на русском языке. Выяснить, входит ли данное слово в указанный текст, и если да, то сколько раз.

В приложении предусмотреть возможность ввода текста:

– генерацией строки из заданного количества букв, цифр, символов.

– вводом из существующего текстового файла;

– вводом с клавиатуры в текстовое поле.

В приложении предусмотреть возможность вывода текста:

– в текстовое поле в приложении

– в текстовый файл

В проекте

  • добавлены 2 отдельных класса для конвертиции между системами счисления и для визуализации успешного/неуспешного сохранения данных, которые легко можно интегрировать в другие проекты.
  • реализована обработка (и устранение) возможных ошибок при вводе исходных данных

Содержание архива

  • Исходники на C# Microsoft Visual Studio 2015
  • Отчет(53с.), который содержит постановку задач, блок-схемы алгоритмов, текст программы и тестовые примеры

Понравилась статья? Поделить с друзьями:
0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
  • Windows 10 для слабых компьютеров ltsc
  • Код ошибки 80072ee2 при обновлении windows 7 как исправить
  • Windows 11 wsl uninstall
  • Внутреннее устройство microsoft windows pdf
  • Как подключить плейстейшен 4 к ноутбуку через hdmi windows 7