Settings.settings
в Properties
:Settings.settings
using yourNameSpace.Properties;
string name = Settings.Default["name"].ToString();
Settings.Default["name"] = name;
, затем Settings.Default.Save();
C:\Windows\Microsoft.NET\Framework\v4.0.30319\csc.exe C:\Users\user\Documents\Projects\proj\main.cs
C:\Windows\Microsoft.NET\Framework\v4.0.30319\csc.exe C:\Users\user\Documents\Projects\proj\*.cs
*.cs
, где *
- все файлы с расширением .cs
cd <your_path>
, и выглядело бы это все примерно так:cd C:\Windows\Microsoft.NET\Framework\v4.0.30319
csc.exe C:\Users\user\Documents\Projects\proj\*.cs
cd ./path
ls ./path
cp ./path ./path
mv ./path ./path
mkdir <dir_name>
> filename.anyext
namespace TryEnum
{
enum DownloadType
{
Video, Audio, Custom, Unknown, Default
}
enum ForceIpProtocol
{
IPv4, IPv6
}
enum ProxyProtocol
{
HTTPS, HTTP, SOCKS4, SOCKS5
}
}
class ClassName : IClassName
, но это не совсем наследование, там немножко другая реализация). И интерфейс нужен в том случае, если нужно реализовать полиморфизм в коде и/или что бы упростить доступ к публичным полям в классах, которые реализуют этот интерфейс. static void Create()
{
// empty...
}
class SimpleHuman : IHuman
{
public string Name { get; set; }
public int Age { get; set; }
public SimpleHuman()
{
Name = "Generic human...";
Age = 20;
}
public SimpleHuman(string name) : this()
{
Name = name;
}
public SimpleHuman(string name, int age) : this()
{
Name = name;
Age = age;
}
}
class CoolHuman : IHuman
{
public string Name { get; set; }
public int Age { get; set; }
public CoolHuman()
{
Name = "BOB!";
Age = 20;
}
public CoolHuman(string name) : this()
{
Name = name;
}
public CoolHuman(string name, int age) : this()
{
Name = name;
Age = age;
}
}
interface IHuman
{
string Name { get; set; }
int Age { get; set; }
}
class Create
{
public IHuman Human { get; set; }
public Create()
{
Human = new CoolHuman();
}
public void Hello()
{
Console.WriteLine("Hello, {0}. Today you are {1} years old", Human.Name, Human.Age);
}
}
dataGridView1.Columns[0].HeaderText = "№";
dataGridView1.Columns[0].MinimumWidth = 25;
dataGridView1.Columns[0].Width = 40;
dataGridView1.Columns[0].Visible = true;
dataGridView1.Columns[1].HeaderText = "Спрятанная колонка";
dataGridView1.Columns[1].Visible = false;
int[] array = new[] { 1, 2, 3, 4, 5 };
int temp;
for (int i = 0; i < array.Length-1; i++)
{
for (int j = i + 1; j < array.Length; j++)
{
if (array[i] > array[j])
{
temp = array[i];
array[i] = array[j];
array[j] = temp;
}
}
}
using yourNamespace.Properties;
, что бы можно было использовать Settings.Default
и заведем там свойство:public static int Count
{
get
{
return (int)(Settings.Default["count"]);
}
set
{
Settings.Default["count"] = value;
Settings.Default.Save();
}
}
YourStaticClass.Count = ++YourStaticClass.Count;
dataGridView1.DataSource = dataSet.Tables[0];
dataSet.Tables[0].Rows.Add();
dataSet.Tables[0].Rows[dataSet.Tables[0].Rows.Count - 1][int номер ячейки, куда добавить string] = receivedData;
dataSet.Tables
индексируются как .Rows[int индекс строки][int индекс столбца/ячейки (Cells)]
, и для того, что бы узнать, какая наша строка добавилась (а добавилась она в конец), мы, узнав количество Rows.Count
строк, вычитаем из Count
1, т.к. индексирование в списках, массивах и т.д. начинается с 0, а в Count
не может быть 0, если есть хоть одна строка, то Count
уже будет равен 1.dataGridView1.Update();
DataSet dataSet = new DataSet();
string filePath = Application.StartupPath + "\\dataset.xml";
private void Form1_Shown(object sender, EventArgs e)
{
// Проверяем наличие файла, если на месте, то загружаем из него наш dataSet
if (File.Exists(filePath))
{
dataSet.ReadXml(filePath);
}
// Если отсутствует, создадим файл с простой структурой для 1 строки
else
{
using (XmlWriter writer = XmlWriter.Create("dataset.xml"))
{
writer.WriteStartElement("Data");
writer.WriteStartElement("rows");
writer.WriteElementString("Type", "");
writer.WriteElementString("Category", "");
writer.WriteElementString("Date", "" + DateTime.Now.ToString("dd.mm.yyy") + "");
writer.WriteElementString("Summ", "0");
writer.WriteElementString("Total", "0");
writer.WriteElementString("Comment", "");
writer.WriteEndElement();
writer.WriteEndElement();
writer.Flush();
}
}
// Заполняем датагрид
DataGridFill(dataSet);
//Подписываемся на событие добавление новой строки
dataGridView1.RowsAdded += new DataGridViewRowsAddedEventHandler(RowsAdded);
}
<?xml version="1.0" standalone="yes"?>
<Data>
<rows>
<Type />
<Category />
<Date>06.03.2020</Date>
<Summ>0</Summ>
<Total>0</Total>
<Comment />
</rows>
</Data>
private void Add_button_Click(object sender, EventArgs e)
{
string empty = "";
string date = DateTime.Now.ToString("dd.mm.yyyy");
if (dataGridView1.Columns.Count != 0)
{
dataSet.Tables[0].Rows.Add(new object[] { empty, empty, date, empty, empty, empty });
dataGridView1.Update();
}
else
MessageBox.Show("Ошибка: Невозможно добавить строку в таблицу, в которой отсутствуют колонки",
"Ошибка",
MessageBoxButtons.OK,
MessageBoxIcon.Error);
}
dataGridView1.RowsAdded += new DataGridViewRowsAddedEventHandler(RowsAdded);
private void DataGridFill(DataSet dataSet)
{
if (dataSet != null)
{
dataGridView1.DataSource = dataSet.Tables[0];
for(int i = 0; i < dataSet.Tables[0].Rows.Count; i++)
{
if (string.IsNullOrEmpty(dataSet.Tables[0].Rows[i][4].ToString()))
ataSet.Tables[0].Rows[i][4] = 0;
}
for (int i = 0; i < dataSet.Tables[0].Rows.Count; i++)
{
if (i != 0 && !string.IsNullOrEmpty(dataSet.Tables[0].Rows[i][3].ToString()))
dataSet.Tables[0].Rows[i][4] = Convert.ToDouble(dataSet.Tables[0].Rows[i - 1][4]) + Convert.ToDouble(dataSet.Tables[0].Rows[i][3]);
else if (!string.IsNullOrEmpty(dataSet.Tables[0].Rows[i][3].ToString()))
dataSet.Tables[0].Rows[i][4] = dataSet.Tables[0].Rows[i][3];
}
}
dataGridView1.Columns[0].HeaderText = "Тип";
dataGridView1.Columns[1].HeaderText = "Категория";
dataGridView1.Columns[2].HeaderText = "Дата";
dataGridView1.Columns[3].HeaderText = "Сумма";
dataGridView1.Columns[4].HeaderText = "Итого";
dataGridView1.Columns[5].HeaderText = "Комментарий";
}
byte[] message = new byte[] { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x00, 0x00 }; // Последние 2 байта под CRC, заполняем нолями
byte[] CRC = (new byte[2]);
GetCRC data = new GetCRC();
data._GetCRC(message, ref CRC); // для этого примера CRC будет равно 0xDDBA, т.е. BA DD
byte[] message_out = new byte[] { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, CRC[0], CRC[1] };
class GetCRC
{
// -----------------------------------------------------------------------------
//Возвращает двухбайтовую контрольную сумму. + Алгоритм расчета CRC
// -----------------------------------------------------------------------------
public void _GetCRC(byte[] message, ref byte[] CRC) // входные данные функции : byte[] message(см. строчку где message.Length)- это данные которые пришли в функцию,
// входные данные функции: ref byte[] CRC - эти данные мы получаем внутри этой функции и потом выводим в тело
// программы откуда мы вызвали эту ффункцию
{
ushort CRCFull = 0xFFFF; // 16-ти битовый регистр загружается числом FF hex (все 1), и используется далее как регистр CRC
char CRCLSB; // переменная определения значения младшего бита в цикле
for (int i = 0; i < (message.Length) - 2; i++) //Повторяются шаги для следующего сообщения(1). Это повторяется до тех пор пока все байты сообщения не будут обработаны.
{
CRCFull = (ushort)(CRCFull ^ message[i]); // Первый байт сообщения (- 2 это отсекаем место под CRC) складывается по ИСКЛЮЧАЮЩЕМУ ИЛИ
// с содержимым регистра CRC. Результат помещается в регистр CRC
for (int j = 0; j < 8; j++) // цикл повторяется 8 раз
{
CRCLSB = (char)(CRCFull & 0x0001); // Если младший бит 0. Повторяется сдвиг (следующая строка).
CRCFull = (ushort)((CRCFull >> 1) & 0x7FFF); // Регистр CRC сдвигается вправо(в направлении младшего бита) на 1 бит, старший бит заполняется 0
if (CRCLSB == 1) // Если младший бит 1
CRCFull = (ushort)(CRCFull ^ 0xA001); // Делается операция ИСКЛЮЧАЮЩЕЕ ИЛИ регистра CRC и полиномиального числа A001 hex
}
}
CRC[1] = (byte)((CRCFull >> 8) & 0xFF); // определяем получившийся старший байт
CRC[0] = (byte)(CRCFull & 0xFF); // определяем получившийся младший байт
}
}