Выбор объекта до запуска основного контента приложения

Например, при оформлении заказа требуется, чтобы магазин был уже установлен. Для этого выбор магазина должен быть предоставлен в начале работы с программой.

Возможно следующее решение данной задачи:

На уровне пользователя решение будет выглядеть так: есть список магазинов, при запуске приложения появляется форма, где необходимо выбрать текущий магазин. При создании записи о покупке текущий магазин автоматически подставляется.

Работа в Flexberry Tool

В Flexberry была создана диаграмма классов. Для определения текущего магазина был создан нехранимый класс ВыборМагазинаПоУмолчанию и сгенерирован программный код.

Работа с программным кодом

В общедоступном для разрабатываемых приложений классе определить статическое поле.

public class Магазин : ICSSoft.STORMNET.DataObject
{
	public static Магазин CurrentShop;
	//...
}

На форме нехранимого класса, для подавления сообщения о сохранении данных на форме, переопределить метод OnClosing, где запретить вызов базового метода.

Для задания значения поля при открытии формы переопределить событие Edit.

Определить работу формы при нажатии на кнопки.

private void buttonAuthorize_Click(object sender, EventArgs e) //нажатие на кнопку "Авторизовать"
{
	//проверить, что магазин выбран
	if ((DataObject as ВыборМагазинаПоУмолчанию).ТекущийМагазин != null)
	{		
		Магазин.CurrentShop = ((ВыборМагазинаПоУмолчанию)DataObject).ТекущийМагазин; //сохранить текущий магазин
		this.DialogResult = DialogResult.OK; //закончить авторизацию
		this.Close();
	}
	else
	{
		MessageBox.Show("Вы не выбрали магазин для авторизации.");
	}
}
private void buttonExit_Click(object sender, EventArgs e) //нажатие на кнопку "Выйти"
{
	this.Close();
}

Запустить форму модально до запуска рабочего стола приложения. Пример из класса МенеджерМагазиновDesktop:

public static bool Run_SetCurrentShopForm()
{
	bool result = false;
	try
	{
		ICSSoft.STORMNET.RightManager.DisableAllRightChecks();
		CheckForIllegalCrossThreadCalls = false;
			IIS.WinUI.Runners.EditFormRunner fr =
				new IIS.WinUI.Runners.EditFormRunner(typeof(C__ВыборМагазинаПоУмолчаниюE),
											"", "Выбор текущего магазина", "",
											new ВыборМагазинаПоУмолчанию(),
											typeof(ВыборМагазинаПоУмолчанию), false);
			System.Windows.Forms.Form frm = null;
			frm = fr.RunAndGetForm();
			if (!frm.IsDisposed && !frm.Disposing)
			{
				frm.BringToFront();
				frm.Visible = false;
				CheckForIllegalCrossThreadCalls = false;
				if (frm.ShowDialog() == DialogResult.OK)
				{
					result = true;
				}
			}
		return result;
	}
	catch (Exception)
	{
		throw new Exception("Не удалось установить значение по умолчанию.");
	}
}

static void Main()
{
	try
	{
		// *** Start programmer edit section *** (МенеджерМагазинов Before authorization)
		//ниже код по запуску формы
		if (!Run_SetCurrentShopForm())
		{
			return; //то есть пользователь не захотел выбрать значение по умолчанию, прекращаем работу
		}
		// *** End programmer edit section *** (МенеджерМагазинов Before authorization)
		//...
	}
	//...
}