Мой вопрос прост: насколько плохим является следующий фрагмент кода? Как будет вы не так ли?Насколько плохо следующий фрагмент?
CancelEventHandler _windowClosing;
private CancelEventHandler WindowClosing
{
set
{
clearEventHandlerList();
this.Closing += value;
_windowClosing = value;
/*
* if calling the method with null parameters,
* it will set up itself as the primary control on the Window
*/
_windowClosing(null,null);
}
get
{
return _windowClosing;
}
}
private readonly CancelEventHandler[] CONTROLS = null;
private int current = 0;
public InitializerForm()
{
InitializeComponent();
/*
* these are the handlers for the different controls,
* in the order of appereance to the user
*/
STATES = new CancelEventHandler[] { handler1, handler2, etc. };
WindowClosing = CONTROLS[0];
}
private void clearEventHandlerList()
{
foreach (CancelEventHandler c in CONTROLS)
{
this.Closing -= c;
}
}
private void handler1(object obj, CancelEventArgs e)
{
if (obj == null)
{
//hide every other control, but this one, also set up if necessary
}
else
{
//do something
WindowClosing = CONTROLS[++current]; // set the next control to show
e.Cancel = true;
}
}
Дело было в том, что код не будет закрывать форму, но вместо того, чтобы показать другой компонент на нем, и множество, как справиться с этим (это мобильная платформа, поэтому, нажав кнопку OK на вершине генерирует событие закрытия). Это связано с тем, что показ нескольких форм (4 или 5) один за другим, пользователь делает мигание приложения, а также очень раздражает, а замена только компонентов намного плавнее. Эта модель работает, но кажется очень неприятной, и я хотел бы, чтобы более чистый способ справиться с этим.
Обновление: Я обновил образец кода, чтобы имена переменных были несколько тихими. Тем не менее, я убежден, что это ужасно, (а), но не уверен, сколько и что более важно, (б) как сделать это лучше.
Обновление 2: Итак, кажется, что код все еще немного загадочен.
Теперь вот что это за проблема: Я покажу пользователю форму, которая дает ему указания, что делать на нескольких языках. Он продолжит, нажав ОК в окне. Затем я прошу его язык, а затем несколько вопросов (где его/ее GPS и т. Д.), Как это. После того, как он сможет ответить на вопросы (это не займет больше нескольких секунд), я покажу ему заставку (я загружаю материал в отдельный поток тем временем), в котором есть изображение. Отображение этих форм один за другим заставляет все приложение запускаться медленно и заполняется лагами пользовательского интерфейса.
Вот что я делаю для того, чтобы обойти задержки: я помещал содержимое окон в панели и клал эти панели один на другой и скрывал каждый из них, но тот, который должен быть видимым пользователю. (current
variable) Каждое из окон делает разные вещи, поэтому мне нужно также изменить обработчик окна closing
. В этом коде часть, которая позволяет панели, имеет ту же функцию (handler1
, handler2
и т. Д.) С частью, которая обрабатывает событие закрытия окна. Если аргументы равны null
, он делает первый, если это не так (это значит, что он был вызван пользователем), он делает последнее.
Мне нужно решение для этого, чтобы я мог вставлять и удалять диалоги в любое время (порядок и указатели на функции хранятся в поле CONTROLS
, и это кажется очень удобным, если вы действительно понимаете Хотя это никогда не бывает легко изменить весь контент формы, должен быть более простой способ сделать это, а также более приятный, вот что я ищу.
Надеюсь, на этот раз Я могу объяснить, как работает модель.
Этот код является злом: P – LDomagala
Предлагаю вам прочитать некоторые правила кодирования .NET или C#. Например, имя переменной.И я второй LDomagala ... – TimothyP
Почему вы показываете пользователю 4 или 5 форм так быстро? – Malfist