- •В.А. Новиков Объектно-ориентированное программирование в с#
- •Минск ● вгкс
- •Лабораторная работа 1 Константы, переменные, выражения. Визуальные элементы: кнопка и текстовое поле
- •Лабораторная работа 2 Операторы управления. Визуальные элементы: маскированное поле и установка цвета
- •Лабораторная работа 3 Ввод – вывод на консоль. Визуализация через файлы. Независимый переключатель и шрифты
- •Лабораторная работа 4 Строки. Модальные формы пользователя
- •Лабораторная работа 5 Массивы. Зависимый переключатель
- •Лабораторная 6 Перечисление. Немодальные формы пользователя
- •Лабораторная 7 Регулярные выражения. Таймер
- •Лабораторная работа 8 Прототипы-данные. Визуальный элемент выпадающий список
- •Лабораторная работа 9 Подпрограммы. Визуальный элемент список. Отработка событий клавиатуры
- •Лабораторная работа 10 Обработка исключительных ситуаций. Визуальный элемент закладка tabControl
- •Лабораторная работа 11 Переопределение операций. Закладка TabStrip
- •Лабораторная работа 12 Работа с файлами. Всплывающая подсказка
- •Лабораторная работа 13 Структуры. Перетаскивание элемента на форме
- •Лабораторная работа 14 Построение графиков через Excel. Объект Drawning
- •Содержание
Лабораторная работа 4 Строки. Модальные формы пользователя
Цель работы.
Изучить формирование программ с использованием строк. Научиться создавать формы с использованием модальных форм.
План занятия.
Изучить теоретические сведения формирования программы на С#.
По приведенному листингу программы разработать на Visual Studio программу и отладить ее. Составить программу по индивидуальному заданию.
Краткие теоретические сведения.
Строки.
Существует два типа строк: String и StringBuilder.
Отличия:
string является неизменяемым типом данного. Это значит, что при любой модификации создается в памяти новая копия, а старая сбрасывается в «мусор».
В связи с этим в string можно только прочитать отдельный символ:
a=”пример”;
c=a[2]; // в с будет буква ‘и’
но нельзя
a[2]=’a’;
StringBuilder является полноправным объектом и при модификации строки это делается именно в этой памяти, а не в копии:
a=”пример”;
c=a[2]; // в c будет буква ‘и’
a[2]=’a’ // буква ‘и’ заменится на ‘а’!
Объект StringBuilder можно наследовать в отличие от string.
С точки зрения работы эти два типа практически одинаковы.
string
Инициализация выполняется КОНСТРУКТОРОМ. Перегруженным конструктором называется конструктор с различным синтаксисом инициализации. Приведем характерные ситуации инициализации строки string:
string s; // размер строки не определен и зависит от того, что ей потом будет присвоено;
string s = “пример”; // аналогично первому, только задается начальное значение
string s = new string(20); //длина строки устанавливается в 20 символов
string s = new string(‘+’,20); // аналогично третьему, только строка заполняется всеми знаками «+»
string s = new string(а); //аналогично 2, только начальная строка берется из массива символов а => char[ ]
Операции над строками
+ ( сцепление строк)
“abc” + “def” // будет “abcdef”
[ ] (обращение к символу строки)
D=A[2] // в D будет записан 3-й символ строки A
Методы и свойства string
Length – (свойство) текущая длина строки в символах: S.Length;
S.Substring(3) – выделение подстроки начиная с 4 символа и до конца строки;
S.Substring(5,3) – выделение подстроки длиной 3 символа, начиная с шестого символа.
Пример:
St = s.Substring(3).Remove(12,2)
По этому примеру из строки s выделяется подстрока начиная с 4 символа и уже в этой подстроке удаляется 2 символа начиная с 13.
Часть методов класса string являются статическими, т. е. независимыми от экземпляра. Если метод статический, то к нему надо обращаться через указание класса String:
String.Join(“!”, mas); // для статического метода нет экземпляра!
StringBuilder
Инициализация возможна только с использованием new:
StringBuilder s = new StringBuilder( ); //создается пустая строка длиной 16 байт;
StringBuilder s = new StringBuilder(100); //создается пустая строка длиной 100 символов;
StringBuilder s = new StringBuilder(“abc”); //создается строка «abc» длиной 3 cимвола;
StringBuilder s = new StringBuilder(“abc”, 100);
StringBuilder s = new StringBuilder(“фапр”,1,3,100); // создается строка длиной 100 символов, в которую записывается начальная строка “апр”
Пример метода s.AppendFormat:
а=1; b=1;
StringBuilder s = new StringBuilder(“s=”);
s.AppendFormat (“{0} и m={1}”,a,b);
Порядок выполнения работы.
Создайте две формы:
FORM2 FORM1
Воспроизведите коды программ.
// PROGRAM
using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;
namespace WindowsFormsApplication1
{
static class Program
{
/// <summary>
/// Главная точка входа для приложения.
/// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Form1 f1=new Form1();
Form2 f2 = new Form2();
DialogResult ss=f1.ShowDialog();
if(ss==DialogResult.OK) f2.textBox1.Text = f1.textBox1.Text;
f2.ShowDialog();
}
}
}
// FORM1
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button2_Click(object sender, EventArgs e)
{
this.DialogResult=DialogResult.OK;
}
private void button1_Click(object sender, EventArgs e)
{
double x, y; string st;
x = Convert.ToDouble(textBox1.Text);
y = Math.Sin(x);
st = String.Format("{0,4:0.##}",y);
textBox2.Text = st;
}
}}
// FORM2
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace WindowsFormsApplication1
{
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
}
private void button2_Click(object sender, EventArgs e)
{
this.Close();
}
private void button1_Click(object sender, EventArgs e)
{
double x, y; string st;
x = Convert.ToDouble(textBox1.Text);
y = Math.Sin(x)+4.5;
st = String.Format("{0,4:0.##}", y);
textBox2.Text = st;
}
}
}
Индивидуальное задание.
Из файла прочитайте строку текста на кириллице. В строке текста замените все буквы м на цифры 2. Получившуюся строку выведите в файл. Задание выполните для string и StringBuilder.
Содержание отчета.
Представить отлаженную программу по индивидуальному заданию.
Литература.
Павловская Т.А. С#, Программирование на языке высокого уровня. – М., СПб: Питер, 2010, с.139-148