Diplom_O/GlobalFormFunc.cs
2024-09-20 06:53:52 +03:00

284 lines
7.4 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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;
}
}
}