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