Diplom_O/GlobalFormFunc.cs

284 lines
7.4 KiB
C#
Raw Permalink Normal View History

2024-09-20 08:53:52 +05:00
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Diplom_O.DataBase;
namespace Diplom_O
{
public static class FormExtention
{
public static User user = null;
public static User GetUser(this Form form)
{
return user;
}
public static void SetUser(this Form form, User usr)
{
user = usr;
}
public static int nextForm = -1;
public static int GetNextForm(this Form form)
{
return nextForm;
}
public static void SetNextForm(this Form form, int value)
{
nextForm = value;
}
public static void correctUpperMenu(this Form form, MenuStrip upMenu, int value)
{
var items = upMenu.Items;
for (var i = 0; i < items.Count; i++)
{
if (user == null)
{
items[i].Enabled = false;
continue;
}
var access = FuncDB.AccessGetByUserIdFormIdAccessId(user.Id, i, 0);
if (access == null)
{
items[i].Enabled = false;
continue;
}
items[i].Enabled = (i != value);
}
}
public static void upperMenuClicked(this Form form, MenuStrip upMenu)
{
var menuItems = upMenu.Items;
for (var i = 0; i < menuItems.Count; i++)
if (menuItems[i].Selected)
nextForm = i;
}
private static int countErr = 0;
private static int currTurnErr = 0;
private static bool flagfollow = false;
public static async void ShowError(this Form form, ToolStripStatusLabel errorLabel, string msg = null)
{
try
{
int ticket = countErr;
countErr = (countErr == int.MaxValue) ? 0 : countErr + 1;
while (flagfollow && (currTurnErr != ticket))
await Task.Delay(1000);
Action func = () =>
{
errorLabel.Text = string.IsNullOrEmpty(msg) ? "Неизвестная ошибка." : msg;
errorLabel.Visible = true;
};
if (form.InvokeRequired)
form.Invoke(func);
else
func.Invoke();
await Task.Delay(5000);
func = () =>
{
errorLabel.Visible = false;
};
if (currTurnErr == ticket)
if (form.InvokeRequired)
form.Invoke(func);
else
func.Invoke();
}
catch
{
return;
}
finally
{
currTurnErr = (currTurnErr == int.MaxValue) ? 0 : currTurnErr + 1;
}
}
private static int countFind = 0;
public delegate void resetTableFind();
public static async void FindOnChanged(this Form form, resetTableFind func)
{
var flag = ++countFind;
await Task.Delay(1000);
Action lFunc = () =>
{
func?.Invoke();
};
if (flag == countFind)
if (form.InvokeRequired)
form.Invoke(lFunc);
else
lFunc.Invoke();
}
public static async void ResetTable(this Form form, DataGridView table, ColumnConf[] columns, string[][] data)
{
try
{
var currSelected = new List<(int col, int row)>();
var tmpCells = table.SelectedCells;
for (var i = 0; i < tmpCells.Count; i++)
currSelected.Add((
tmpCells[i].ColumnIndex,
tmpCells[i].RowIndex
));
ClearTable(form, table, columns);
FillTable(form, table, data);
for (var i = currSelected.Count - 1; i >= 0; i--)
{
var col = currSelected[i].col;
var row = currSelected[i].row;
if (row >= 0 && row < table.Rows.Count && col >= 0 && col < table.Columns.Count)
table[col, row].Selected = true;
}
}
catch
{
throw;
await Task.Delay(1000);
}
}
public static async void ClearTable(this Form form, DataGridView table, ColumnConf[] columns)
{
Action func = () =>
{
table.Rows.Clear();
table.Columns.Clear();
var c = table.Columns;
for (var i = 0; i < columns.Length; i++)
{
c.Add(columns[i].name, columns[i].name);
c[i].Width = columns[i].size;
if (columns[i].warp)
c[i].DefaultCellStyle.WrapMode = DataGridViewTriState.True;
}
};
if (form.InvokeRequired)
form.Invoke(func);
else
func.Invoke();
return;
await Task.Delay(1000);
}
public static async void FillTable(this Form form, DataGridView table, string[][] data)
{
if (data == null || data.Length == 0)
return;
try
{
if (table.Columns.Count != data[0].Length)
throw new Exception("Количество элементов данных (" + data[0].Length +
") не соответствует колчиству столбцов (" + table.Columns.Count + ")");
foreach (var lRow in data)
table.Rows.Add(lRow);
}
catch
{
throw;
await Task.Delay(1000);
}
}
}
public static class FormArray
{
public static readonly string[] formName = {
"Актуальные вакансии",
"Люди",
"Сотрудники",
"Стаж",
"Образование",
"Отпуск/Больничный",
"Дети",
"Настройки"
};
public static readonly string[] formAccess = {
"Чтение",
"Удаление",
"Изменение",
"Добавление"
};
public static int GetNameInt(string name)
{
var result = -1;
for (var i = 0; i < formName.Length; i++)
if (name.CompareTo(formName[i]) == 0)
result = i;
return result;
}
public static string GetNameString(int id)
{
var result = "Ошибка";
if (id >= 0 && id < formName.Length)
result = formName[id];
return result;
}
public static int GetAccessInt(string name)
{
var result = -1;
for (var i = 0; i < formAccess.Length; i++)
if (name.CompareTo(formAccess[i]) == 0)
result = i;
return result;
}
public static string GetAccessString(int id)
{
var result = "Ошибка";
if (id >= 0 && id < formAccess.Length)
result = formAccess[id];
return result;
}
}
public static class TableColumnssss
{
public static readonly ColumnConf Id = new ColumnConf(name: "№");
public static readonly ColumnConf Free = new ColumnConf(name: "Своб.");
public static readonly ColumnConf KolVo = new ColumnConf(name: "Кол-во");
public static readonly ColumnConf Male = new ColumnConf(name: "Пол");
public static readonly ColumnConf TabNum = new ColumnConf(name: "Таб. №", size: 80);
public static readonly ColumnConf BDay = new ColumnConf(name: "Дата рождения", size: 80);
public static readonly ColumnConf INN = new ColumnConf(name: "ИНН", size: 100);
public static readonly ColumnConf SNILS = new ColumnConf(name: "СНИЛС", size: 100);
public static readonly ColumnConf Dolj = new ColumnConf(name: "Должность", size: 140);
public static readonly ColumnConf TypeStaj = new ColumnConf(name: "Тип стажа", size: 140);
public static readonly ColumnConf FIO = new ColumnConf(name: "Фамилия И.О.", size: 140);
public static readonly ColumnConf Adress = new ColumnConf(name: "Адрес", size: 140, warp: true);
public static readonly ColumnConf Pasport = new ColumnConf(name: "Паспорт", size: 140, warp: true);
}
public struct ColumnConf
{
public string name;
public int size;
public bool warp;
public ColumnConf(string name = "ErNO", int size = 60, bool warp = false)
{
this.name = name;
this.size = size;
this.warp = warp;
}
}
public struct CopyOfColumnConf
{
public string name;
public int size;
public bool warp;
public CopyOfColumnConf(string name = "ErNO", int size = 60, bool warp = false)
{
this.name = name;
this.size = size;
this.warp = warp;
}
}
}